如果我从Activity中的onCreate启动服务,完成()活动,然后再次启动应用程序,会发生什么?

Ted*_*Ted 2 service android

我想弄清楚Android在生命周期问题上的工作原理.

我已经决定拥有一个长期运行的服务来保存我的TCP连接和其他东西.

我有一个Activity,StartupActivity.该Activity启动一项服务,然后按一个按钮完成活动.然后我再次启动相同的app/Activity,从而再次执行startService.

但是,我预计服务仍然存在(没有调用onDestroy),但服务中的onCreate方法仍在执行中.

为什么?

第1步:在StartupActivit中执行onCreate:

@Override
protected void onCreate(android.os.Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.startup);

    startService(new Intent(StartupActivity.this, SamcomService.class));
    registerReceiver(connectionReceiver, new IntentFilter("STARTUP_PROGRESS_MESSAGE"));
    registerReceiver(connectionReceiver, new IntentFilter("STARTUP_FINISH"));

    final Button button = (Button) findViewById(R.id.buttonExit);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            finish();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

第2步:我按下按钮,调用Activity.finish()(我返回主屏幕)

第3步:我再次启动应用程序,再次执行活动的onCreate,从而启动相同的服务

现在,当我第二次启动应用程序服务应该运行时(如何检查?).我没有看到调用Service onDestroy时显示的Toast,我也看到了Service创建的Notification(并删除了onDestroy).

但是,onCreate是第二次执行.我现在有多个服务同时运行吗?

8bi*_*ide 7

但是,onCreate是第二次执行.我现在有多个服务同时运行吗?

不,我知道这很令人困惑,但startService()方法无法启动该服务.每次运行它时都会在服务中调用它.例如,如果服务未启动,它将启动它然后运行它.如果服务已启动,它将运行它.android文档说它是这样设计的,因此startService()方法是与服务进行通信的最简单方法.

第2步:我按下按钮,调用Activity.finish()(我返回主屏幕)

这取决于您的服务是否与您的活动在同一进程上运行.如果您在清单中的服务声明中有:process ="something",并且您完成了其他所有操作,则该服务处于另一个流程中,并且只有三种情况会导致您的服务被销毁.1,你的活动被破坏(几乎保证不会发生,因为你的进程有其活动的活动优先级),2,存在极低的内存,3服务调用selfStop().

由于finish()不会破坏你的应用程序(Android会将其保留在内存中,用户会回到它上面),您的服务要么暂停(如果它在同一个进程中),要么仍在运行(如果它是在不同的处理).无论对startService()的另一个调用是否会在暂停时重新启动它并运行服务的startService方法.您只有一个服务.