大佬教程收集整理的这篇文章主要介绍了尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道网上有很多长寿命 AndroID 服务的解决方案,但它们都不适用于我在 AndroID 9 上。因此,非常感谢您在此处提供的任何帮助。 我的服务实现了 SensorEventListener 并且我想连续监视手机的 3 个传感器变化,即使主要活动进入后台或被杀死(我知道电池寿命,这不是这里的问题)。我经历过的解决方案是:
1-使用 startForegroundservice(按照 Google 开发者的建议)
if(Build.VERSION.SDK_INT>=Build.VERSION_CODEs.O){
Intent i = new Intent(context,myservice.class);
startForegroundservice(i);
}else {
Intent i = new Intent(context,myservice.class);
startservice(i);
}
2-在服务结束时调用 startForeground onCreate
Notification nf=GetNotification();
startForeground(NOTIFICATION_ID,nf);
3-overrIDe onDestroy 和 onTaskRemoved(单独和两者一起)并调用 sendbroadcast 将意图发送到在内部启动服务的广播接收器它的 onReceive 回调
@OverrIDe
public voID onTaskRemoved(Intent rooTintent) {
super.onTaskRemoved(rooTintent);
Intent tnt=new Intent("com.myAppPackage.appname.actionname");
sendbroadcast(tnt);
}
public voID onDestroy() {
super.onDestroy();
Intent tnt=new Intent("com.myAppPackage.appname.actionname");
sendbroadcast(tnt);
}
和广播接收器:
private class clsKeepserviceAlive extends broadcastReceiver{
@OverrIDe
public voID onReceive(Context context,Intent intent) {
if(Build.VERSION.SDK_INT>=Build.VERSION_CODEs.O){
Intent i = new Intent(context,myservice.class);
startservice(i);
}
}
}
private clsKeepserviceAlive m_keepserviceAlive=new clsKeepserviceAlive();
并在服务OnCreate中动态和显式地注册此接收器,正如androID开发人员文档所建议的:
IntentFilter iflt4=new IntentFilter();
iflt4.addAction("com.myAppPackage.appname.actionname");
iflt4.addAction("androID.intent.action.LOCKED_BOOT_COMPLETED");
iflt4.addAction("androID.intent.action.bOOT_COMPLETED");
registerReceiver(m_keepserviceAlive,iflt4);
以及我尝试的最后一个解决方案,但没有成功
5- 在 Manifest 中使用服务属性:
<service
androID:name=".myservice"
androID:enabled="true"
androID:exported="false"
androID:process=":myservicename"
androID:directBootAware="true"
androID:label="@String/app_name"
androID:stopWithTask="false" />
但是所有这些解决方案都不适合我。我在服务的 onDestroy 回调中放置了一条消息,以便在服务被销毁时写入数据库(以确保服务何时被销毁) 并且当我的应用程序进入后台或被用户杀死时,我肯定会收到通知(前台服务通知)并且我在应用程序图标(红色的 1 上方图标)上看到它,但几分钟后(例如 20 分钟)当我回到手机我看到图标没有通知标志,通知本身消失并且服务已被破坏(我下次运行应用程序时可以看到它的消息)。 Afetr 将近 1 周尝试了网上建议的任何解决方案,我必须添加有关此问题的另一个问题,并请你们提供一定的帮助。这是应用程序 gradle 的一部分:
androID {
compileSdkVersion 30
buildToolsversion "30.0.3"
defaultConfig {
applicationID "com.myAppPackage.appname"
minSdkVersion 23
targetSdkVersion 30
versionCode 1
versionname "1.0"
testinstrumentationRunner "androIDx.test.runner.AndroIDJUnitRunner"
}
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了全部内容,希望文章能够帮你解决尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。