当活动被用户杀死时,onDestroy()没有被调用?

时间:2014-01-06 05:35:30

标签: android callback notifications ondestroy

我有两个标签的活动。单击两个选项卡将更改选项卡下方的片段。当该活动在前面时,我发出通知,之后我最小化应用程序并杀死该活动(而不是强制停止)。

我的问题是,当活动被用户杀死时,我没有回复onDestroy。现在,如果我点击通知,应用程序将强制关闭,因为缺少未决意图的活动。为什么不在onDestroy中收回回电?

4 个答案:

答案 0 :(得分:5)

我找到了解决方法:

  1. 创建服务:

    public class MyService extends Service {
    
        @Override
        public final int onStartCommand(Intent intent, int flags, int startId) {
            return START_STICKY;
        }
    
        @Override
        public final IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onTaskRemoved(Intent rootIntent) {
            Toast.makeText(getApplicationContext(), "APP KILLED", Toast.LENGTH_LONG).show(); // here your app is killed by user
    
            try {
                stopService(new Intent(this, this.getClass()));
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                super.onTaskRemoved(rootIntent);
            } else{}
        }
    }
    
  2. 然后在应用开始时启动您的服务:

    startService(new Intent(this, MyService.class));
    

    确保在AndroidManifest.xml中注册服务

    <service
                android:enabled="true"
                android:name="yourPackageName.MyService"
                android:stopWithTask="false" />
    

答案 1 :(得分:3)

当您明确调用onDestroy时,保证会调用

finish()

相反,当您通过按Home键onDestroy最小化您的应用时,现在可能无法调用。如果您的应用长时间停留在后台,则会调用onDestroy

出于调试目的,您可以启用Settings|Developer Options|Don't save Activities。这样,当您的应用进入后台时,系统会立即调用onDestroy

答案 2 :(得分:1)

我不确定在片段onDestroy()中获得回调。当我们杀死应用程序时,活动的onDestroy()将获得回调,活动将被终止并且片段可能无法获得回调。

答案 3 :(得分:0)

正如文档所述,无法依赖onDestroy(),当操作系统想要杀死应用程序时会调用它,比如在低内存条件下。因此,当用户点击后退按钮或主页时,会调用onPause()或onStop()来代替它。尝试在thr onPause()或onStop()方法中实现回调。