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.Ru
4000
nningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
}
return null;
}
//判断进程名(在OnCreate执行其他之前,这里的readidcard是我们在Manifest配置Activity的进程名)
//进程名缘来
<activity
android:name=".view.Activity_ReadIDCard"
android:process=":readidcard"
android:launchMode="singleTask"
android:theme="@style/CustomActivityDialogStyle" />
其实导致进入这个Activity变卡的原因多进程多启动ApplicationApp 我们实现方法就是不让ApplicationApp多次启动
解决办法:
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多次启动
相关文章推荐
- 【随心笔录】Android多进程实现,一个APP多个进程
- Android 7.0 ActivityManagerService(10) App的crash处理
- Android 7.0 ActivityManagerService(10) App的crash处理
- Android 使用友盟分享SDK,分享到QQ成功后,遇到app被销毁后,回到此分享界面无法正常点击界面问题。--连QQ都忘记处理的activity状态恢复问题
- 关于 AppDomain 未知异常导致进程崩溃的处理办法
- JNI javah cannot access android.app.Activity 处理方案
- android 启动新 app 的activity 新进程的创建
- Android Application Launch [ 创建进程--〉绑定App-->启动Activity/Start Service/...]
- Android中1像素Activity进程保活
- android init进程分析 init脚本解析和处理
- android下通过app名字打开程序(activity)链接
- AppCompatActivity android.content.res.Resources$NotFoundException: Resource ID #0x7f060052
- APP开发实战152-Android使用UncaughtExceptionHandler处理异常
- Bug:'xxActivity' is not assignable to 'android.app.Activity
- Android 设定横竖屏,屏幕旋转导致Activity重置问题
- Android开发App状态栏隐藏和显示及颜色控制处理
- Android issue: You need to use a Theme.AppCompat theme (or descendant) with this activity
- 关于android.app.ActivityManagerNative
- Linux 创建多进程 & 线程时的进程栈段处理
- [Android面试题-2] Activity和进程的关系