开机向导wifi设置无法跳过
来源:互联网 发布:手机控制路由器软件 编辑:程序博客网 时间:2024/04/29 12:00
目前第一次开机(或者恢复出厂设置后开机)有以下两个问题:
- 开机向导wifi设置界面skip按钮置灰,等待一段时间后才可以点击跳过
- 开机动画完成后黑屏一段时间才出现开机向导第一个界面
以上两个问题并不会同时出现(即类似互斥关系)
WIFI设置界面无法skip问题,主要因为GmsCore得3个dex文件做dex2oat时间太长导致:
- 由于手机防盗功能,开机向导在wifi设置界面需要判断FRP的状态来决定是否一定需要网络来登录Google账户验证
- FRP状态需要通过GmsCore的FrpService获取,而FrpService需要等待GmsCore的3个插件dex文件做dex2oat完成后才能启动
- 如果在开机向导的wifi设置界面,FrpService还没有启动起来,那么这个时候skip按钮就是置灰的;需要一直等待FrpService启动后获取到正确的FRP状态后skip按钮才可以点击
开机向导启动前黑屏问题,关键在于从开机动画完成到开机向导的第一个有界面activity启动花费太长时间,而这个又是因为其它应用在开机阶段首次运行时做dex2oat导致cpu loading几乎100%:出现黑屏问题的时候,由于开机向导启动时间被延后,所以在wifi设置界面时GmsCore的dex2oat已完成,这个时候可以正常通过FrpService获取到frp状态,从而可以一次性跳过;而未出现黑屏问题的时候,由于开机向导启动时间早,所以在wifi设置界面时GmsCore的dex2oat还未完成,所以无法正常获取frp状态,导致无法skip
总结:
以上两个问题都是同一个原因造成(App占用CPU资源做dex2oat),只是对应的现象不一样
解法主要从以下方面进行优化:
- 缩短GmsCore插件做dex2oat时间
- 延迟开机向导启动时间(加长开机动画时间)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
import
java.lang.Thread;
final
int
startActivityLocked(...) {
...
if
(err == ActivityManager.START_SUCCESS) {
final
int
userId = aInfo !=
null
? UserHandle.getUserId(aInfo.applicationInfo.uid) :
0
;
///M: @{
ComponentName SetupCmpName = intent.getComponent();
String GMSSetupString =
"com.google.android.setupwizard/.SetupWizardActivity"
;
if
(userId ==
0
&& SetupCmpName !=
null
&& GMSSetupString.equals(SetupCmpName.flattenToShortString())) {
int
sleepTimeMS =
5000
;
Slog.i(TAG,
"setupwizard sleep "
+ sleepTimeMS);
try
{
Thread.sleep(sleepTimeMS);
}
catch
(Exception e){
Slog.i(TAG, e.toString());
}
}
///M: @}
Slog.i(TAG,
"START u"
+ userId +
" {"
+ intent.toShortString(
true
,
true
,
true
,
false
)
...
}
...
}
因为这是64位GMS造成的性能问题,所以如果此项目配置稍差,那么以上的sleepTimeMS可能还要加大(side effect:sleep时间过长会导致通过system server启动的Service等操作因为等待执行而timeout甚至发生anr)
当然,如果项目配置好,这个时间可以修改缩短进行测试
这里sleep造成的影响是,延迟第一次开机时间,即退出动画会延长一段时间退出,因为只对第一次开机动画时间有影响,这个对用户影响不是很大
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/frameworks/base/core/java/android/os/AsyncTask.java
public
final
boolean
cancel(
boolean
mayInterruptIfRunning) {
///M: @{
java.lang.StackTraceElement stackTrace[] =
new
java.lang.Throwable().getStackTrace();
for
(
int
i =
0
; i < stackTrace.length; i ++) {
String classMethodName = stackTrace[i].getClassName()+
"."
+stackTrace[i].getMethodName();
//"com.google.android.gms.auth.frp.FrpClient.isChallengeSupported"
if
(classMethodName.contains(
"com.google.android.setupwizard.util.FrpHelper"
)) {
android.util.Log.w(LOG_TAG,
"Setupwizard canceled this task, getStatus()="
+getStatus());
return
false
;
}
}
///M: @}
mCancelled.set(
true
);
return
mFuture.cancel(mayInterruptIfRunning);
}
0 0
- 开机向导wifi设置无法跳过
- 开机向导wifi设置无法跳过
- GMS 5.1_r3/6.0_r2 以上版本开机向导wifi设置无法跳过
- android 开机向导中wifi界面无法跳过,
- Android开机向导setupwizard,设置系统语言,WiFi向导
- 跳过设置向导方法
- 跳过 google的开机向导 SetupWizard
- 设置开机时自动跳过用户选择界面
- 如何跳过Nexus 7二代的开机设置
- Pi WIFI 设置以及开机自动运行
- windows开机密码跳过
- 在加入谷歌开机向导的情况下,使wifi关闭
- 安卓开机引导(向导)页面,类似google开机设置引导
- android 开机向导
- android开机向导实现
- 开机向导实现原理
- Android4.4开机向导
- 开机向导两三事
- spring security
- Swift -UIButton和UIImageView的用法
- 多个项目共享JAR包-解决Tomcat项目部署过程中的内存溢出
- Centos7上搭建SVN服务器并实现自动同步至web目录
- 省赛记
- 开机向导wifi设置无法跳过
- python3内置函数详解
- Baby-Step-Gaint-Step算法详解
- 如何下载但不安装rpm包文件
- MongoDB 3.2.9 分布式集群搭建
- Idea-LifecycleException when deploying
- Android Studio JNI开发入门教程
- Eclipse:An internal error occurred during: "Build Project". GC overhead limit exceeded
- 针对微软Exchange邮箱系统的取证分析