0

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

4

1 回答 1

3

仅通过静态调用 stopService 不会立即调用它。正如活动的生命周期图中所指出的,如果 vm 需要资源,它将被销毁

当我有疑问时,我只需使用日志工具并在 LogCat 上检查它们的输出。如果您像这样覆盖 OnDestroy 方法:

protected void onDestroy() {
Log.d("event","onDestroy was Called!");
super.onDestroy();
}

您可以在调用时验证自己。

如果您想在后台销毁您的一项活动,您可以使用活动管理器:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("<packagename>");

如果它不在您的应用程序中,您当然需要在清单上设置权限。以我有限的经验,我还没有找到需要破坏任何进程的时间;但我确实发现很多文档告诉我不要这样做,例如

进一步检查,我认为这个问题已经涵盖

于 2012-08-22T08:47:18.787 回答