当我调用stopService(intent)时

时间:2012-08-22 08:25:45

标签: android android-service android-lifecycle

就生命周期而言,当我调用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()来终止任何先前的服务(查询线程)以启动新服务(新查询线程)。

1 个答案:

答案 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