1、开机自启动。 这是最简单的自启动方式,只需要在Manifest.xml文件中,注册监听 android.intent.action.BOOT_COMPLETED 事件并且授权。然后新建监听器监听广播。 Manifest.xml文件注册内容如下:
<uses-permission android.name = "android.permission.BOOT_COMPLETED"/>
<receiver android:name = ".*Activity"
<intent-filter>
<action android:name = "android.intent.action.BOOT_COMPLETED"/>
<intent-filter>
</receiver>
然后新建监听器
public class myBroadcastReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(intent.getaction().equals(“android.intent.action.BOOT_COMPLETED))
{
//可以触发自定义事件
intent wakeIntent = new Intent();
//从receiver中启动activity必须得加此标记
wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
wakeIntent.setclass(context, MainActivity.class);
context.startActivity(wakeIntent);
}
}
}
2、android的进程有六个优先级别,分别是:一、前台进程 二、可见进程 三、次要服务进程 四、后台进程 五、内容供应节点六、空进程。通过在Mainfest中设置应用属性为 android:persistent = "true",可以将应用提升为系统级进程,etting->application里面也会屏蔽掉stop操作。但需要将应用的apk放到 system/app/目录下安装,自己试过后发现,system/app/目录下无法手动修改。因此这步没有成功。
3、完全让进程不被kill是不可能的,我们可以通过一些操作,使进程被kill几率变小
1)后台操作采用运行前台Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高
2)按back键使得进程中的activity在后台运行而不是destroy,需要载back按键
3)依赖于其他优先级高的进程
4、监听系统其他广播,如解锁。
uses-permission android.name = "android.permission.USER_PRESENT"/>
<receiver android:name = ".*Activity"
<intent-filter>
<action android:name = "android.intent.action.USER_PRESENT"/>
<intent-filter>
</receiver>
或者监听电量改变事件,但实验中在xml文件中直接注册并没有效果,需要在MainActivity中新建一个service,并在service的onStartCommand中通过registerReceiver(bcBroadcastReceiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED))注册广播接收器; 使用unregisterReceiver(bcBroadcastReceiver)来注销广播接收器。
5、进程守卫。不明觉厉,最简单的就是在service1的onDestroy方法里写上启动service2的代码,在Service2的onDestroy中写上启动Service1的代码