您的位置:首页 > 移动开发

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

2018-03-23 09:51 681 查看
解决身份证扫描停不下来,而采用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.Ru
4000
nningAppProcessInfo 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多次启动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: