我希望在我的应用程序被杀死时执行一些操作。 可以使用哪种方法?我正在使用Android 5.0。
答案 0 :(得分:6)
这个问题的关键是:
您必须了解您的申请是否可以获得任何申请 当您的应用程序在任何情况下被杀死时的额外回调。
Devunwired在这个问题中回答了以下答案:
Android app doens't call "onDestroy()" when killed (ICS)
这将有助于您更多地理解这一点。
如果您的应用程序通过外部方式终止(即因内存原因而被终止或用户强制停止应用程序),您的应用程序将不会收到任何其他回调。当应用程序进入后台进行应用程序清理时,您将不得不处理回调。
finish()
仅在用户按下Activity中的BACK按钮时由系统调用,尽管应用程序通常会直接调用它来保留Activity并返回上一个Activity。从技术上讲,这不是生命周期回调。
onDestroy()
仅在调用finish()
时调用Activity,因此主要仅在用户点击BACK按钮时才会调用。当用户点击HOME按钮时,前景活动仅通过onPause()
和onStop()
。
这意味着Android不会向活动提供太多反馈,以区分用户回家与移动到另一个活动(来自您的应用或其他任何活动);活动本身只知道它不再在前台。 Android应用程序是一个松散的活动集合,而不是一个紧密集成的单一概念(就像你可能习惯在其他平台上)所以没有真正的系统回调来知道你的应用程序整体已被提出或向后移动。
最终,我建议您重新考虑您的应用程序架构,如果它依赖于您的应用程序中的任何活动是否在前台的知识,但根据您的需要,可能还有其他方式更友好的框架来完成这个。一种选择是在应用程序内部实现绑定Service
,每个Activity
在活动时绑定(即onStart()
和onStop()
之间)。这为您提供的是能够利用绑定Service
仅在客户端绑定的情况下生存的事实,因此您可以监控onCreate()
和onDestroy()
方法服务以了解当前前台任务何时不属于您的应用程序。
您可能还会发现Dianne Hackborn编写的this article有趣地介绍了Android架构以及Google认为应该如何使用它。
答案 1 :(得分:1)
你必须使用服务类,如 -
public class Myservice extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; }
@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(Constants.TAG, "Service Started"); return START_NOT_STICKY; }
@Override public void onDestroy() { super.onDestroy(); Log.d(Constants.TAG, "Service Destroyed"); }
@Override public void onTaskRemoved(Intent rootIntent) { Log.e(Constants.TAG, "END"); //Perfome here want you want to do when app gets kill stopSelf(); } }
在清单中 -
<service android:name="Myservice"
android:stopWithTask="false" />
在您的启动器活动的Oncreate
或应用程序类中启动服务 -
startService(new Intent(getBaseContext(), OnClearFromRecentService.class));
答案 2 :(得分:0)
您可以使用自己的onDestroy()
方法。