Android处理Activity单开进程,导致app变慢(Android多进程)

解决身份证扫描停不下来,而采用Activity独立进程,通过开启和关闭该进程来实现开启和关闭扫描,问题:反应慢,卡顿


 解决办法:
1、使用独立的App,将该App独立出来,通过调用该App来实现,因为这个独立的app比较小,比较容易初始化,原来Activity新开进程,会将整个项目重新初始化一遍,导致速度慢,有点卡。但这样同样出现的问题,在一个App去调用另一个独立的App的时候,也会出现少许的切换屏效果,用户体验不行,就好比你在某某APP调用QQ去登陆一样。该方法失败


2、我的想法是在启动App的时候初始化的时候,就同时去初始化该Activity,这样就可以在跳转的时候,直接跳转到一个初始化好的activity,这样相对来就比较快一点,但是问题来了,我们通过Intent跳转到一个Activity的时候,相当于跳转到一个崭新的Activity,进入后才执行初始化,该方法失败


3、我的新想法是既然独立开启一个进程耗时,为何不在初始化的时候直接,多开启这个用来读取身份证的进程,在需要的的时候再调用,这样相对来就快一点,但未实现,因为 还不会。。。
4、从网上查资料,发现其实在程序中开启多进程的时候,会将我们继承于Application的这个ApplicationApp类进行多次初始化,我们就在ApplicationApp类中手动获取进程名


//获取进程名(独立方法)
public static String getProcessName(Context cxt, int pid) {
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps != null && !runningApps.isEmpty()) {
            for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
                if (procInfo.pid == pid) {
                    return procInfo.processName;
                }
            }
        }


        return null;
    }

public static String getProcessName(Context cxt, int pid) {
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps != null && !runningApps.isEmpty()) {
            for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
                if (procInfo.pid == pid) {
                    return procInfo.processName;
                }
            }
        }


        return null;
    }
//判断进程名(在OnCreate执行其他之前,这里的readidcard是我们在Manifest配置Activity的进程名)
 String curProcessName = getProcessName(context, android.os.Process.myPid());
        if (curProcessName.endsWith("readidcard")) {
            return;
        }




//进程名缘来

 <activity
            android:name=".view.Activity_ReadIDCard"
            android:process=":readidcard"
            android:launchMode="singleTask"
            android:theme="@style/CustomActivityDialogStyle" />



其实导致进入这个Activity变卡的原因多进程多启动ApplicationApp  我们实现方法就是不让ApplicationApp多次启动




版权声明:本文为qq965672903原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。