我有两个标签的活动。单击两个选项卡将更改选项卡下方的片段。当该活动在前面时,我发出通知,之后我最小化应用程序并杀死该活动(而不是强制停止)。
我的问题是,当活动被用户杀死时,我没有回复onDestroy
。现在,如果我点击通知,应用程序将强制关闭,因为缺少未决意图的活动。为什么不在onDestroy中收回回电?
答案 0 :(得分:5)
我找到了解决方法:
创建服务:
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{}
}
}
然后在应用开始时启动您的服务:
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()方法中实现回调。