使用webSockets的Android长时间运行服务

n8ghc7c1  于 2023-08-05  发布在  Android
关注(0)|答案(1)|浏览(125)

试图使一个自定义的应用程序服务包(如Facebook的服务)安装与应用程序APK
大家好,一年来我一直在尝试制作一个自定义的应用程序服务包(像Facebook服务),我希望accomplich我需要我的应用程序后台Web Socket的预期结果(获取高度评价的通知),在服务内部运行,但几乎Android操作系统讨厌这种类型的应用程序,关于这个主题的任何建议,注意,我尝试了泄漏金丝雀机制,它安装了一个单独的发射器活动,但它不工作,FCM在过去几年里做得不好,即使有付费计划,提前感谢。

ycl3bljg

ycl3bljg1#

据我所知,从你的问题,你试图留在后台,因为你可以。即使应用程序已关闭或后台/前台。让我和你分享一些魔法吧)
首先,让我们声明一些broadcast receiver,以便在重启后要求android ping你的应用程序(我猜你无论如何都需要它)。舱单申报

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACTION_LOCKED_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<receiver
    android:name=".MyReceiver"
    android:exported="false"
    android:enabled="false" >
    <intent-filter>
        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        <action android:name="android.intent.action.PACKAGE_REPLACED" />
        <action android:name="android.intent.action.ACTION_BOOT_COMPLETED" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

字符串
然后为你的接收器创建类。

class MyReceiver: BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) { }
    
        companion object{
            fun enable(){
                getAppContext().packageManager.setComponentEnabledSetting(
                    ComponentName(getAppContext(), MyReceiver::class.java),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP
                )
            }
    
            fun disable(){
                getAppContext().packageManager.setComponentEnabledSetting(
                    ComponentName(getAppContext(), MyReceiver::class.java), PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP
                )
            }
        }
    }


通过这种方式,您要求android在设备重新启动后唤醒您的应用程序,并使用DONT_KILL_APP尽可能地保持它的活力。唤醒你的应用程序意味着你的应用程序类中的代码也会被触发,这是你可以做你的逻辑的地方-检查你的套接字是否仍然打开,如果需要打开或启动你的服务,或者只是做任何你需要的!它会扩大你的背景。
另一个技巧--你可以使用工作管理器来安排一些无用的轻量级工作,比如在迭代之间会休眠一段时间的无限循环。小心线程不要阻塞用户界面!安排工作经理定期执行这项工作,最少15分钟和权限,如互联网。通过这种方式,你将要求android为你的应用程序提供网络/处理器资源。此外,还有一种方法是唤醒在维护窗口期间,当您的设备在打盹模式。
遵循这些指导方针,你将获得大量的背景时间。但你应该小心,并使用你的资源负责,以保持生存尽可能多的android允许你。希望对你有用。

相关问题