背景:
在android中有时需要在某个条件下自动的杀死后台的apk进程,这里假设点击home键的时候,主动的取杀死后台指定的apk进程。以这样的一个场景为例子,来讲解一种方法。
实现步骤:
1.当点击home键的时候,系统会检测到此动作,代码位置为:policy/src/com/android/internal/policy/impl/PhoneWindowManager.java,具体函数: void launchHomeFromHotKey() 。在此处设置一个属性表示,比如为persist.clickhomebutton,设置为1.然后在init.rc中添加相应的属性检测服务。
2.属性服务如下,在init.rc中添加如下内容:
init.rc添加的内容如下:
on property:persist.clickhomebutton=1
start clearbackapp
service clearbackapp /system/bin/clearbackapp.sh
class clearbackapp
disabled
3.当home键按下的时候,persist.clickhomebutton属性被设置,执行/system/bin/clearbackapp.sh此脚本,
脚本的功能就是要杀死后台指定的apk进程,脚本内容如下:
#!/system/bin/sh
#桌面apk的activity名字
home_activity_name="com.android.launcher/.MainActivity"
for i in 1 2 3 4 5
do
usleep 200000
#获取当前top的activity
top_activity=`dumpsys activity | grep mResumedActivity | awk '{print $4}'`
#当确定桌面为当前运行的apk,即已经回到桌面的时候,杀死相应的后台apk程序,以包名来指定
if [ "$top_activity" = "$home_activity_name" ] ;then
ps | grep com.gbits.atm | awk '{print $2}' | xargs kill -9
setprop ttvmd.clickhomebutton 0
break
fi
done