赞
踩
android 保活的一种有效的方法
说起程序的保活,其实很多人都觉得,要在手机上进行保活,确实是想做一些小动作,其实有些正常的场景也是需要我们进行保活的,这样可以增强我们的用户体验。保活就是使得程序常驻内存,这种程序不容易被杀,或者在被杀以后还能完成自我启动,相当于有个监控程序一样,当我们的程序退出以后,能帮我们在拉起来。
保活的方式有很多,但是大部分的效果并不是很好,如果有看过其他的一些文章,我们应该有了解,双进程保活,一像素保活,so保活,关播保活等。
但是这些保活方式还是很容易被杀。根本无法对抗一些高级的查杀软件,或者是 adb shell am force-stop XXX
。
如果能够抗住force-stop
那么基本上也就能在内存上站住脚了。
通过了那么多的试验后,发现应用通知保活 这种方式是最简单而且支持的厂商也最多。唯一的缺点就是需要用户开启权限。
如果有用过一些push消息以后,我们会发现这些push消息,能够推送到手机上,当我们点击提示的时候会调到我们的应用中,如果利用push的消息,发现手机和我们断开了,我们往手机里面发送一个push消息,是否可以把我们的应用拉起来?
下面把程序实现出来,看看他能不能过扛得住force-stop
新建一个 NotificationService
open class NotificationService : NotificationListenerService() { private val TAG = "NotificationService" override fun onCreate() { super.onCreate() } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { return Service.START_STICKY } override fun onBind(intent: Intent?): IBinder? { return super.onBind(intent) } override fun onRebind(intent: Intent?) { super.onRebind(intent) } override fun onUnbind(intent: Intent?): Boolean { return super.onUnbind(intent) } override fun onListenerConnected() { super.onListenerConnected() } override fun onListenerDisconnected() { super.onListenerDisconnected() } override fun onNotificationRemoved(sbn: StatusBarNotification) { super.onNotificationRemoved(sbn) } override fun onNotificationPosted(sbn: StatusBarNotification) { } override fun onDestroy() { super.onDestroy() } }
NotificationService
是空的,我们这里不做什么事情,如果你想做一些启动其他服务的事情,你也可以在这里onCreate
进行。
在AndroidManifest.xml
中,加入 NotificationService
服务,注册这个服务到系统中。
<service
android:name=".service.NotificationService"
android:exported="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter android:priority="999">
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
就是这么简单,没有几行代码就可以实现一个保活的程序。我们看看效果如何?
记住一定要到设备和应用通知 把我们的程序打开来。
我们的demo程序为com.first66.keepmealive
,一开始的时候程序是活着的,我们需要制造一个意外让程序结束,这个意外我们直接用adb 命令来干掉com.first66.keepmealive
。
adb shell am force-stop com.first66.keepmealive
发现com.first66.keepmealive
先结束以后,后面马上又自己跑起来了。这个过程执行了两次,两次app都能够自己启动起来。
如果需要程序代码的话,可以和我进行私信联系。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。