关闭app后如何停止意向服务

时间:2015-03-31 06:55:51

标签: java android eclipse android-intent service

我已在我的应用程序中添加了Google即时搜索。它的工作方式是,用户在EditText对象中键入内容,然后按下按钮,这个意图运行 -

                Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
                String term = searchInput.getText().toString();
                intent.putExtra(SearchManager.QUERY, term);
                startActivity(intent);

然而,我在启动意图后遇到了杀死服务的问题。 除非我将意图指向另一个类本身,否则在意图之后调用finish();将不起作用。

这里是我的意思的视频预览,你可以清楚地看到我正在回家关闭应用程序,但是当我重新打开它时。它会打开Goog​​le即时应用。但是当向后按压时,它会停止。按主页键后,我究竟能获得停止的意图吗?

我的应用程序是一个对话类型的应用程序,因此由于各种原因我将其从最近的菜单中排除。一旦用户退出,应用程序就会在其他任何地方自动终止,但此处服务仍在继续运行。

视频 - Video Preview

我也尝试了许多问题答案,已经研究过但到目前为止没有任何帮助。我可能做错了什么。有人可以帮助我,非常感谢你! :)

4 个答案:

答案 0 :(得分:1)

已启动的服务必须管理自己的生命周期。也就是说,系统不会停止或销毁服务,除非它必须恢复系统内存并且服务在onStartCommand()返回后继续运行。因此,服务必须通过调用stopSelf()来停止,或者其他组件可以通过调用stopService()来停止它。

答案 1 :(得分:0)

在完成分配给服务的任务时使用stopSelf()。 如果你想在应用程序完成时完成服务,那么在onDestroy()中,在检查它是否运行后调用stopService(),可以使用这样的方法:

public static boolean isMyServiceRunning(Class<?> serviceClass, Activity pActivity) {
ActivityManager manager = (ActivityManager) pActivity.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}

答案 2 :(得分:0)

停止代码下面的活动使用服务:

stopService(new Intent(yourMainActivity.this,yourIntentService.class));

或者您可以在服务中写下条件以阻止自己,如下所示:

if(check your condition here)
   stopSelf();

答案 3 :(得分:0)

您不必停止IntentService - 当它没有更多工作要做时它将自行终止。

  • 它在单独的工作线程上运行。
  • 多个意图在同一个工作线程上排队。

因此,即使您的Activity已从此服务的启动位置销毁,它仍将继续执行其任务,直到所有排队的服务完成,并在完成后自动终止。

警告:您的应用程序在完成工作后停止服务非常重要,以避免浪费系统资源和消耗电池电量。如有必要,其他组件可以通过调用stopService()来停止服务。即使您为服务启用了绑定,如果它曾接到对onStartCommand()的调用,也必须始终自行停止服务。

stopService():请求停止给定的应用程序服务。如果服务没有运行,则没有任何反应。否则它会停止。请注意,不计算对startService()的调用 - 无论启动多少次都会停止服务。

注意:如果停止的服务仍然具有绑定到它的ServiceConnection对象并且设置了BIND_AUTO_CREATE,则在删除所有这些绑定之前不会销毁它。