程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了?

开发过程中遇到尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了的问题如何解决?下面主要结合日常开发的经验,给出你关于尽管使用了我在 stackoverflow&android developer 上找到的所有解决方案,Android 服务还是被破坏了的解决方法建议,希望对你解决尽管使用了我在 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 onDestroyonTaskRemoved(单独和两者一起)并调用 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,请注明来意。