繁体   English   中英

Android:应用重新启动后服务未启动

[英]Android : service not being launched after app restart

我面临的是我完全不了解的事情,这可能是由于我是Android的新手。

我启动一个创建服务的简单活动。 这里没有魔术。 启动应用程序时,一切正常。 但是,如果我杀死它并在几秒钟内再次启动它,那么我的服务将无法启动(我在服务的OnCreate()方法上添加了一个日志,但未显示任何内容)。

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Log.d(TAG, "ON CREATE");
    s_instance = this;

    registerReceiver(deviceEventReceiver, new IntentFilter("com.horizon.watch.moto360.receiveDeviceEvent"));

    setContentView(R.layout.activity_main);
    //Launch default home page
    defaultHomePage = (FrameLayout) findViewById(R.id.defaulthomepage);
    defaultHomePage.setVisibility(View.VISIBLE);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    startService(new Intent(this, WearMessageListenerService.class));

}

@Override
protected void onDestroy() {
    Log.d(TAG, "ON DESTROY");

    stopService(new Intent(this, WearMessageListenerService.class));
    unregisterReceiver(deviceEventReceiver);
    super.onDestroy();
}

由于未调用onDestroy() ,您的服务可能已启动,因为它已经在运行。

从onDestroy()文档中:

注意:不要指望此方法被称为保存数据的地方! 例如,如果活动正在内容提供商中编辑数据,则这些编辑应在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处提交。 通常实现此方法以释放与活动相关联的线程之类的资源,以使被破坏的活动不会在其其余应用程序仍在运行时留下这些东西。 在某些情况下,系统会简单地终止活动的托管过程,而无需在其中调用此方法 (或任何其他方法 ),因此不应将其用于处理在过程消失后仍然存在的事情。

另外,您说您“杀死”您的应用程序。 我假设您的意思是您使用任务管理器关闭该应用程序。 这可能是为什么您的onDestroy()没有被调用的原因,因此您的原始服务很可能没有被停止(如问题注释中所述)。 仅在您的应用程序上调用finish()情况下,才能真正保证调用onDestroy()方法。 您可以对此进行测试。

在您的onPause()方法中,您可以调用isFinishing()来测试您的应用程序是否只是暂停,或者是否实际上一直在完成。 如果实际上正在完成,则可以将stopService()调用放在此处以实际停止服务。


编辑:响应下面的评论...这就是您将如何实现如上所述的onPause()方法...

@Override
protected void onPause() {
    super.onPause();
    if(isFinishing()) {
        Log.d("APP SHUTTING DOWN", "The app is shutting down and the service should be stopped.");
        stopService(new Intent(this, WearMessageListenerService.class)); 
        unregisterReceiver(deviceEventReceiver);
    } else {
        Log.d("APP PAUSING", "The app has moved to the background, but is still active. The service should continue running.");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM