请问大神,关于Activity不能完全finish的问题

sulinly 2018-01-12 04:23:26
MainActivity 启动服务后台服务后执行Finnish,将MainActivity停止,见代码1。执行后MainActivity界面的确不见了,按手机多任务键(有的手机是长按home键)检查,多任务里该程序不见了,后台服务也能正常运行。此时按多任务键界面里的全部关闭程序,所有多任务程序被关闭掉,但后台程序依然能正常运行。

问题:如果将finish放到MainActivity的buton中执行,见代码2。按钮执行后MainActivity界面的确不见了,但是按手机多任务键检查,多任务里该程序依然存在。此时按多任务键界面里的全部关闭程序,所有多任务程序被关闭掉,同时后台程序同时被关闭。为何将finish放到按钮中执行就不正常了,咋个解决呢?

代码1:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//启动服务
Intent i1 = new Intent(this, MyService.class);
startService(i1);
finish();
}
}


代码2:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//启动服务
Intent i1 = new Intent(this, MyService.class);
startService(i1);
// finish();
setContentView(R.layout.activity1);
findViewById(R.id.btn_hide).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});

}
}


手机的多任务界面:
...全文
862 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sulinly 2018-01-16
  • 打赏
  • 举报
回复
引用 2 楼 usecf 的回复:
打印下log adb logcat 看看报什么错误 或者异常
发现不通过按钮的finish的确有报错,应该是报错引起的任务清单里没有该程序吧。谢谢大神,我在想是不是可以用这个bug做个保活程序呢? 01-16 23:39:26.723 25313-25313/com.sugem.autoweb E/AndroidRuntime: FATAL EXCEPTION: main Process: com.sugem.autoweb, PID: 25313 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sugem.autoweb/com.sugem.autoweb.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2735) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2796) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1521) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6265) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:906) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:354) at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323) at android.support.v7.app.AppCompatDelegateImplV9.findViewById(AppCompatDelegateImplV9.java:233) at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) at com.sugem.autoweb.MainActivity.onCreate(MainActivity.java:48) at android.app.Activity.performCreate(Activity.java:6774) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1125) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2688) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2796)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1521)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6265)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:906)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 
sulinly 2018-01-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_38074369 的回复:
只是代码运行先后顺序而已,界面是在onResume走完之后才可交互的,提前finish了,只是变成无界面进程了,程序还是在的,只是你看不到;而按钮可以点击时,早已变为可交互状态了,当然是有界面的进程了。我只是好奇你的后台为什么不会被一键清理,可以看下源码吗?
根据你的思路,我又研究了下,看能不能在有界面的情况下彻底关闭界面,我发现在主题设置为android:theme="@android:style/Theme.NoDisplay"时,能够彻底关闭界面,但只能在AndroidManifest.xml中设置,没找到动态设置的方法,你有其他方法关闭界面吗?
sulinly 2018-01-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_38074369 的回复:
只是代码运行先后顺序而已,界面是在onResume走完之后才可交互的,提前finish了,只是变成无界面进程了,程序还是在的,只是你看不到;而按钮可以点击时,早已变为可交互状态了,当然是有界面的进程了。我只是好奇你的后台为什么不会被一键清理,可以看下源码吗?
引用 4 楼 qq_38074369 的回复:
只是代码运行先后顺序而已,界面是在onResume走完之后才可交互的,提前finish了,只是变成无界面进程了,程序还是在的,只是你看不到;而按钮可以点击时,早已变为可交互状态了,当然是有界面的进程了。我只是好奇你的后台为什么不会被一键清理,可以看下源码吗?
的确做了个小小的保活,很简单,做了个悬浮窗。现在我就是在测试再多任务状态下全部强制关闭程序时不依赖其他复杂手段靠程序自己如何能不被强制干掉的可能性,也不知道这个思路对不对。悬浮窗的代码很简单需要我可以发上来。
wkp111 2018-01-15
  • 打赏
  • 举报
回复
只是代码运行先后顺序而已,界面是在onResume走完之后才可交互的,提前finish了,只是变成无界面进程了,程序还是在的,只是你看不到;而按钮可以点击时,早已变为可交互状态了,当然是有界面的进程了。我只是好奇你的后台为什么不会被一键清理,可以看下源码吗?
wkp111 2018-01-15
  • 打赏
  • 举报
回复
你的后台service可以保活吗?能看一下源码吗?
usecf 2018-01-15
  • 打赏
  • 举报
回复
打印下log adb logcat 看看报什么错误 或者异常
Smoyan_ 2018-01-15
  • 打赏
  • 举报
回复
我觉得问题没有出在这里,应该在其他代码里,Activity没有结束肯定是因为还有其他线程或者mHandler任务没有完成, 而且正常的Activity调用finish destory以后,最近任务列表是会出现的。这是android模仿ios为了再次快速进入热启动

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧