android应用重启使用ProcessPhoenix注意事项
ProcessPhoenix可以用来重启android应用,并且速度非常快。不过使用中的一些坑需要注意一下
1、重启时,如果自定义了继承自Application的子类,该子类会被调用两次,会导致onCreate被调用两次,并且这两次调用是完全相互独立的,如果你的应用有一些初始化是放在onCreate方法中,并且多次调用可能会出问题。
解决方案1:
推荐使用解决方案1,ProcessPhoenix提供了一个isPhoenixProcess方法用于判断当前进程是否是临时的Phoenix进程,可在Application子类的onCreate方法中进行判断
public void onCreate() {
super.onCreate();
Context context = this.getApplicationContext();
if (ProcessPhoenix.isPhoenixProcess(context)){
return;
}
}
解决方案2:在build.gradle引用ProcessPhoenix,然后在Application子类的onCreate方法中调用通过当前进程名称来判断是ProcessPhoenix启动的进程,还是应用启动的进程。注:如果在项目中直接拖入ProcessPhoenix.java或者将ProcessPhoenix.java打jar包再加入工程,重启时启动的两个进程名相同,如都为com.example.yangzijiang.activitytest,这样就无法区分到底是ProcessPhoenix的进程还是应用本身启动的进程。
public void onCreate() {
super.onCreate();
if ("com.example.yangzijiang.activitytest".equals(getProcessName())){
// 初始化操作可以放在此
}
}
2、启动Activity还要配置android.intent.category.DEFAULT,否则在ProcessPhoenix.java的getRestartIntent方法中找不到默认要启动的Activity。
<activity android:name="com.example.yangzijiang.app.RestartAppActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
参考文献
1.https://github.com/JakeWharton/ProcessPhoenix
2.https://stackoverflow.com/questions/6609414/how-to-programmatically-restart-android-app