Android 前台服务在执行与internet相关的操作时被终止
更新:以前,我找不到一个定义良好的模式,说明我的前台服务何时被终止。在对发生这种情况的设备(并非所有设备)进行更多调试后,我发现了这种情况。 1.)很多时候,当我打开chrome加载一个网站时,前台服务被终止。有时甚至在我使用whatsapp时也会发生这种情况。 2.)没有例外,stacktrace没有显示任何有用的内容。 原问题如下: 关于StackOverflow有很多这样的问题,但到目前为止,我读到的答案大多是说它是由Android操作的,我们不能100%保证前台服务不会被终止。一些答案建议开始时要有粘性,但这对我的情况没有多大帮助 在我的例子中,我有一个音乐播放器应用程序,它有一个前台服务。这项服务在某些设备上被终止,主要是Xiomi的一些版本(Android版本是5.1.1)现在我明白android可能内存不足,因此我的前台服务将被终止,但为什么其他音乐播放器应用程序从未经历过这样的终止呢。什么是他们做得对而我做得不对? 我使用Android 前台服务在执行与internet相关的操作时被终止,android,android-service,Android,Android Service,更新:以前,我找不到一个定义良好的模式,说明我的前台服务何时被终止。在对发生这种情况的设备(并非所有设备)进行更多调试后,我发现了这种情况。 1.)很多时候,当我打开chrome加载一个网站时,前台服务被终止。有时甚至在我使用whatsapp时也会发生这种情况。 2.)没有例外,stacktrace没有显示任何有用的内容。 原问题如下: 关于StackOverflow有很多这样的问题,但到目前为止,我读到的答案大多是说它是由Android操作的,我们不能100%保证前台服务不会被终止。一些答案建
startForeground
进行前台服务。另外,我在onStartCommand中返回START\u STICKY
,尽管这没有帮助,因为如果终止,服务将在4-5秒后重新启动。将我的服务与我使用的活动绑定
bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT );
那么,为了防止这种情况发生,我到底可以改进/更改我的应用程序,如果其他应用程序工作正常,那么我的情况一定是出了问题。有人能帮忙吗。提前谢谢
编辑:
这就是我如何称呼startForeground()
此服务在某些设备上被终止,主要是在某些版本的
Xiomi(Android版本为5.1.1)
对此不确定,但据我了解,这可能是因为
startService()
启动服务,这允许
服务无限期运行,并允许客户端绑定到
通过调用调用服务。(这称为绑定到已启动的服务)
如果确实允许启动和绑定服务,则当
服务已启动,系统不会在
所有客户都解除绑定。相反,您必须通过
调用stopSelf()
或stopService()
尽管您通常应该实现或
,有时两者都需要实现。对于
例如,音乐播放器可能会发现允许其服务
无限期运行并提供绑定。这样,活动就可以
启动服务播放一些音乐,音乐将继续播放
即使用户离开了应用程序。然后,当用户返回
对于应用程序,活动可以绑定到服务以恢复
播放控制
在向已启动的服务添加绑定时,请务必阅读关于的部分,以了解有关服务生命周期的更多信息
启动服务时将调用onStartCommand
,因此START\u STICKY
仅在startService()时有效
流程日志更新
程序5:prcp F/S/IF trm:0 22407:com.wave.music.player/u0a2
(前景服务)
在进程日志中,使用adj设置prcp(可见的前台服务)
记录在前台运行的播放器服务,这意味着它实际上是坚不可摧的。尽管如此,您的服务仍被操作系统破坏,但运行新发布的应用程序的可用内存可能非常少。据此,
系统中只有几个前台进程,这些进程
只有当内存太低,甚至
这些进程可以继续运行。一般来说,在这一点上
设备已达到内存分页状态,因此需要执行此操作
以保持用户界面的响应性
所以我认为你没有做错什么。我只是想建议你们阅读Android开发者的官方文档,并尝试在单独的过程中运行你们的服务(文档建议音乐播放器应用采用这种方法)。要小心实现这一点,因为如果操作不当,它很容易增加而不是减少RAM占用空间 由于以下原因,Xiomi手机发生了这种情况
MIUI 7.0解决方案=>安全性=>Autostart=>选择要在后台运行的应用=>重新启动
重新启动后,您的设备应该能够像其他android设备一样在后台运行应用程序服务
若你们在寻找其他的电话,那个么请检查这里的服务结构。它会自动重启,但当你们重启电话呼叫接收器时
public class AppService extends Service {
private class LocalBinder extends Binder {
public AppService getServerInstance() {
return AppService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If we get killed, after returning from here, restart
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
}
}
谢谢,希望这能对您有所帮助。您能演示一下如何调用startForeground(),当前台服务被终止时,您是否注意到任何特定的模式?例如:当你打开另一个音乐播放器应用程序或打开youtube等时?@AADTechnical No没有特定的模式,即使我只保留它自己,它也会在一个小时后停止while@ucsunil谢谢你的回复,我已经添加了代码!!感谢您确认是否有人打电话给您?感谢您抽出时间回答。我正在使用startService()并将我的活动绑定到我的服务。因为这对m很有效
public class AppService extends Service {
private class LocalBinder extends Binder {
public AppService getServerInstance() {
return AppService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If we get killed, after returning from here, restart
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
}
}