开机自启动和多进程守护
2016-03-15 20:36
549 查看
开机自启动和多进程守护
publicclass BootCompletedReceiverextends
BroadcastReceiver{
publicvoid
onReceive(Context context, Intent intent) {
}
}
l 在Manifest中注册监听
在AndroidManifest.xml中设置监听
</receiver>
l 设置接收权限
可以参考:
http://coolerfall.com/android/android-app-daemon/
通过File->New->Import Module,导入Library
l 编写守护服务,并通过Daemon.run(this, DaemonService.class, Daemon.INTERVAL_ONE_MINUTE);启动守护。
public class DaemonServiceextends
Service {
@Override
public void onCreate() {
super.onCreate();
Log.e("DaemonService","DaemonServiceonCreate");
Daemon.run(this, DaemonService.class, Daemon.INTERVAL_ONE_MINUTE);}
}
l 进行测试
<
4000
br />
下载链接:
http://download.csdn.net/detail/liumangshan1234/9462467
开机自启动
基本原理
Android系统在开机的时候会发出一个广播(BOOT_COMPLETED)。应用程序可以接收这个广播,然后启动应用的相关服务。广播接收器必须静态注册,设置在Manifest的xml配置中,因为xml里面配置的广播接收器不随应用的退出而退出的。实现方式
l 设置广播接收器publicclass BootCompletedReceiverextends
BroadcastReceiver{
publicvoid
onReceive(Context context, Intent intent) {
//TODO complete the logic of the program
}
}
l 在Manifest中注册监听
在AndroidManifest.xml中设置监听
<receiver android:name=".BootCompletedReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.HOME"/> </intent-filter>
</receiver>
l 设置接收权限
在AndroidManifest.xml中设置接收自启动广播的权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
多进程守护
基本原理
Android系统中防杀技术主要包括:
1. Service设置成START_STICKY,kill 后会被重启(等待5秒左右)
2. 通过 startForeground将进程设置为前台进程,做前台服务,优先级和前台应用相同。
3. 双进程Service:让2个进程互相保护,其中一个Service被清理后,另外没被清理的进程可以立即重启进程
4. 在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死
5. 通过系统漏洞获取ROOT权限,然后设置应用程序为系统应用。
上述方式都存在一定问题,Android service的双守护基本会失败,其他技术只能提高不被杀死的概率,在程序进程被杀死后,很难恢复。另一个较好的思路是多进程守护。
Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。可以通过JNI编程,fork出c进程,实现多进程守护。
l 具体的思路如下: 用C编写守护进程(即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
l 在NDK环境中将1中编写的C代码编译打包成可执行文件(BUILD_EXECUTABLE)。
l 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
可以参考:
http://coolerfall.com/android/android-app-daemon/
https://github.com/Coolerfall/Android-AppDaemon
http://www.zhihu.com/question/29826231
实现方式
l 将library程序绑定到需要进行进程守护的程序中;通过File->New->Import Module,导入Library
l 编写守护服务,并通过Daemon.run(this, DaemonService.class, Daemon.INTERVAL_ONE_MINUTE);启动守护。
public class DaemonServiceextends
Service {
@Override
public void onCreate() {
super.onCreate();
Log.e("DaemonService","DaemonServiceonCreate");
Daemon.run(this, DaemonService.class, Daemon.INTERVAL_ONE_MINUTE);}
}
l 进行测试
<
4000
br />
下载链接:
http://download.csdn.net/detail/liumangshan1234/9462467
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories