我有一项由活动启动(未绑定)的服务。如果活动被破坏(例如通过按下后退按钮),服务将继续运行,这当然是有意的。但是,如果我将活动从“最近的应用程序”列表中滑出,该服务会立即重新启动。这是可重现的,每次将活动/应用程序从列表中滑出时,都会对服务的 onCreate 方法进行一次新调用。中间不要调用 onDestroy !
首先,我认为服务被 android 杀死了,尽管我没有看到杀死的原因(活动和服务都没有做资源消耗的事情,实际上它们是极简的,什么也不做)。但后来我注意到该服务实际上崩溃了。
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
代码不值得注意,但在这里
活动:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
服务:
public class TestService extends Service {
private static final String TAG = "Service";
// onBind omitted
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
}
简而言之:我的服务独立于活动的生命周期,但只要我不刷出最近应用列表的应用即可。在这种情况下,服务会重新启动,但不会调用 onDestroy。
每次发生这种情况时,不仅服务的状态,而且服务正在做的工作都会丢失。我只想知道为什么滑动是这个原因。