我想弄清楚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是第二次执行.我现在有多个服务同时运行吗?
但是,onCreate是第二次执行.我现在有多个服务同时运行吗?
不,我知道这很令人困惑,但startService()方法无法启动该服务.每次运行它时都会在服务中调用它.例如,如果服务未启动,它将启动它然后运行它.如果服务已启动,它将运行它.android文档说它是这样设计的,因此startService()方法是与服务进行通信的最简单方法.
第2步:我按下按钮,调用Activity.finish()(我返回主屏幕)
这取决于您的服务是否与您的活动在同一进程上运行.如果您在清单中的服务声明中有:process ="something",并且您完成了其他所有操作,则该服务处于另一个流程中,并且只有三种情况会导致您的服务被销毁.1,你的活动被破坏(几乎保证不会发生,因为你的进程有其活动的活动优先级),2,存在极低的内存,3服务调用selfStop().
由于finish()不会破坏你的应用程序(Android会将其保留在内存中,用户会回到它上面),您的服务要么暂停(如果它在同一个进程中),要么仍在运行(如果它是在不同的处理).无论对startService()的另一个调用是否会在暂停时重新启动它并运行服务的startService方法.您只有一个服务.
| 归档时间: |
|
| 查看次数: |
4878 次 |
| 最近记录: |