添加依赖
在build.gradle 中添加以下依赖:
implementation 'com.xdandroid:hellodaemon:1.2.2'
初始化
先自定义一个Application,然后在其中初始化下面代码:
package com.android.jarvis import android.app.Application import com.xdandroid.hellodaemon.DaemonEnv class App : Application() { override fun onCreate() { super.onCreate() //wakeUpInterval定时唤醒的时间间隔(ms), 默认 6 分钟 DaemonEnv.initialize(this, KeepService::class.java, 10000) DaemonEnv.startServiceMayBind(KeepService::class.java) } }
实现自定义Service,继承AbsWorkService
具体代码
package com.android.jarvis import android.content.Intent import android.os.IBinder import com.xdandroid.hellodaemon.AbsWorkService class KeepService : AbsWorkService() { override fun onBind(intent: Intent?, alwaysNull: Void?): IBinder? { return null } override fun shouldStopService(intent: Intent?, flags: Int, startId: Int): Boolean { return false } override fun startWork(intent: Intent?, flags: Int, startId: Int) { TODO("Not yet implemented") } override fun stopWork(intent: Intent?, flags: Int, startId: Int) { TODO("Not yet implemented") } override fun isWorkRunning(intent: Intent?, flags: Int, startId: Int): Boolean { return true } override fun onServiceKilled(rootIntent: Intent?) { TODO("Not yet implemented") } }
引导用户将 App 加入白名单
具体代码如下:
package com.android.jarvis import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.xdandroid.hellodaemon.IntentWrapper class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //引导用户将 App 加入白名单 IntentWrapper.whiteListMatters(this, "轨迹跟踪服务的持续运行") } //防止华为机型未加入白名单时按返回键回到桌面再锁屏后几秒钟进程被杀 override fun onBackPressed() { IntentWrapper.onBackPressed(this) } }
配置AndroidManifest.xml
具体代码如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.jarvis"> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:testOnly="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Jarvis"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".KeepService" android:priority="2147483647"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> </intent-filter> </service> </application> </manifest>
效果
启动应用,按照提示将自动化辅助APP加到白名单
注意这里不同手机品牌的引导内容会有差异,按照提示操作即可。
经测试手动杀掉应用会发现一段时间后应用又被重新拉起来,可以看到应用主进程和watch进程相互守护,主进程启动watch进程,watch进程定时启动主进程,从而达到保活的效果。
此时我们就拥有了一个可以最大限度常驻后台的服务,接下来就可以往里面填充内容了,后续会逐渐完善这个自动化辅助APP