美文网首页
android应用重启使用ProcessPhoenix注意事项

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

作者: RiverYang | 来源:发表于2017-06-08 20:43 被阅读0次

    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

    相关文章

      网友评论

          本文标题:android应用重启使用ProcessPhoenix注意事项

          本文链接:https://www.haomeiwen.com/subject/iyitqxtx.html