最近,在inter教育版本的项目中,实现了后台杀不死的服务。
1、前台服务
2、主进程fork()子进程。
(1)Android.mk:声明c文件
(2)xxx.h:声明native方法
(3)xxx.c:
a:fork子进程(1),再fork子进程,再杀死子进程(1)
b:AllocObject(env, clazz);初始化应用成对象
c:(*env)->SetObjectField(env, subprocess,
(*env)->GetFieldID(env, clazz, "mContext",
"Landroid/content/Context;"), context);把上下文环境传给应用层
d:jni调用java层,初始化监听,并且主线程wait(),
d:利用FileObserver监听:onEvent事件,当为不可写文件被 close时。
/proc/+pid (杀不死)
"/data/data/"+pkgName; 卸载反馈
e: Runtime.getRuntime() .exec("am start --user 0 -n com.polysaas.emmlite/com.polysaas.emmlite.ui.FragmentHomeActivity");重启应用