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

本文探讨了身份证扫描功能在Android应用中的优化方法。面对扫描过程中的延迟和卡顿问题,提出了多种解决方案,包括使用独立App、预加载Activity及多进程管理等,并深入分析了各自的优缺点。
解决身份证扫描停不下来,而采用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多次启动



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值