android应用重启使用ProcessPhoenix注意事项

2017-06-08  本文已影响0人  RiverYang

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

上一篇下一篇

猜你喜欢

热点阅读