就生命周期而言,当我调用stopService(intent)时,是否会立即调用服务的onDestroy()?我问,因为我有问题,调用onDestroy()来杀死服务生成的这个线程。
提前致谢!
button.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Log.d(Tag, "in button's onClick");
Log.d(Tag, field.getText().toString());
String busNo = field.getText().toString();
field.setText("");
field.setAdapter(clearAdapter);
String url = makeURL(busNo);
Log.d(Tag, "after makeURL(), url is now "+url);
Intent intent = new Intent(JSoupTest9Activity.this, ServiceTest.class);
Log.d(Tag, "intent created...");
intent.putExtra("URL", url);
Log.d(Tag, "intent's extra put");
Log.d(Tag, "stopping intent service");
stopService(intent);
Log.d(Tag, "starting intent service");
startService(intent);
Log.d(Tag, "service started");
//pendingIntent = PendingIntent.getService(JSoupTest8Activity.this, 0, intent, 0);
//alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 30*1000, pendingIntent);
}
});
如您所见,我调用stopService()来终止任何先前的服务(查询线程)以启动新服务(新查询线程)。
答案 0 :(得分:2)
仅通过静态calliong stopService不会立即调用它。如活动的lifecycle图所示,如果vm需要资源,它将被销毁
当我有疑问时,我只需使用日志工具并在LogCat上检查它们的输出。如果您重写OnDestroy方法,如下所示:
protected void onDestroy() {
Log.d("event","onDestroy was Called!");
super.onDestroy();
}
您可以在调用时验证自己。
如果你想破坏你在Background中的一个活动,你可以使用一个活动管理器:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("<packagename>");
如果它不在您的应用程序中,您当然需要在清单上设置权限。凭借我有限的经验,我没有找到时间来摧毁任何过程;但我确实找到了很多文件告诉我不要,for example
进一步检查,我认为这个问题是was covered already