gpt4 book ai didi

java - 如何在应用程序关闭时保持服务在后台运行,但在应用程序处于前台时停止/禁用它?

转载 作者:太空狗 更新时间:2023-10-29 12:44:34 25 4
gpt4 key购买 nike

在这种情况下,我很难尝试处理服务行为。

基本上我有一个在单独进程上运行的服务,它需要在应用程序关闭时每隔特定时间发出 httprequests,然后将某些内容写入首选项或发出通知。

逻辑运行良好。我遇到的问题是我无法找到一种方法来在应用程序运行时正确停止/禁用该服务,以及在应用程序完成或进入后台时再次启动它

我尝试在我的 Activity 的@onResume()/@onStart() 回调处停止它,并在@onStop()/@onDestroy() 处启动它,但在任何情况下行为都没有按预期运行...

我将在此处粘贴一些到目前为止我尝试过的代码 fragment :

我使用以下方式启动/停止服务:

stopService(new Intent(this,NotificationService.class));
startService(new Intent(this, NotificationService.class));

来 self 的应用程序的随机 Activity (都在其回调中实现):

    @Override
protected void onResume() {
if (Utility.isMyServiceRunning(this)){
Utility.serviceClose(this);
}
super.onResume();
}

@Override
protected void onStop() {
if (!Utility.isMyServiceRunning(this)){
startService(new Intent(this, NotificationService.class));
}
super.onStop();
}

这在某种程度上不起作用或带来意外行为,因为应用程序从许多 Activity 中移出,并且当应用程序运行时服务最终处于 Activity 状态或当应用程序处于后台/完成时停止。

我还尝试通过询问在每个 cicle 上打开/关闭服务 timertask 上的服务逻辑:

    @Override
public void run() {

ActivityManager activityManager = (ActivityManager) getBaseContext().getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfos.size(); i++){
if(procInfos.get(i).processName.equals("com.example.myapp")) {
return;
}
}
//service http request logic here
}

但这也不起作用,因为进程“com.example.myapp”永远不会被杀死(当然我不能/想要强制完成它),所以它永远不会发出任何 httprequest。

关于如何实现这个的任何想法?非常欢迎任何帮助。

提前致谢。

最佳答案

如何绑定(bind)到您的服务,然后直接与之通信?实现一个简单的开/关 boolean 值,在绑定(bind)上公开一个 getter/setter,然后确保服务在执行任何工作之前检查 boolean 值。这样您就可以在应用程序运行时禁用它,而不必重复实际启动/停止服务。

http://developer.android.com/guide/components/bound-services.html

关于java - 如何在应用程序关闭时保持服务在后台运行,但在应用程序处于前台时停止/禁用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com