我已在我的应用程序中添加了Google即时搜索。它的工作方式是,用户在EditText对象中键入内容,然后按下按钮,这个意图运行 -
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
String term = searchInput.getText().toString();
intent.putExtra(SearchManager.QUERY, term);
startActivity(intent);
然而,我在启动意图后遇到了杀死服务的问题。
除非我将意图指向另一个类本身,否则在意图之后调用finish();
将不起作用。
这里是我的意思的视频预览,你可以清楚地看到我正在回家关闭应用程序,但是当我重新打开它时。它会打开Google即时应用。但是当向后按压时,它会停止。按主页键后,我究竟能获得停止的意图吗?
我的应用程序是一个对话类型的应用程序,因此由于各种原因我将其从最近的菜单中排除。一旦用户退出,应用程序就会在其他任何地方自动终止,但此处服务仍在继续运行。
视频 - Video Preview
我也尝试了许多问题答案,已经研究过但到目前为止没有任何帮助。我可能做错了什么。有人可以帮助我,非常感谢你! :)
答案 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,则在删除所有这些绑定之前不会销毁它。