延迟开机时间。规避第一次刷机启动后莫名会拉出白屏。

延迟开机时间:

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

在privatevoid performEnableScreen() {方法中

有个

if (!mBootAnimationStopped) {

源码是执行

SystemProperties.set("service.bootanim.exit","1");

mBootAnimationStopped = true;

就是告诉系统开机动画加载完毕了

我们这里做个延迟

mH.postDelayed(
                    new Runnable() {
                        @Override
                            public void run() {
                           SystemProperties.set("service.bootanim.exit", "1");
                           mBootAnimationStopped = true;
                        }
                    },2000);

用到的handler这个mH就是源码有的

规避第一次刷机启动后莫名会拉出白屏:

最优解:

packages/apps/Provision/AndroidManifest.xml

就一个<activityandroid:name="DefaultActivity"

加入属性:

android:directBootAware="true"

由于FallbackHome启动后需要接受到用户取消解锁广播后才finish自己,启动下一个homeActivity,这样就引起了白屏闪现。因此打开Provision 的directBootAware属性,使其可直接启动。

这个加入之后第一次刷开机会出现个读条显示:yourphone is starting

Provision就是个开机向导应用,这个应用就是先于launcher的。拉出的白屏很可能就是这个DefaultActivity

源码

public class DefaultActivity extends Activity {
 
    @Override
    protected voidonCreate(Bundle icicle) {
       super.onCreate(icicle);
 
        // Add apersistent setting to allow other apps to know the device has been provisioned.
       Settings.Global.putInt(getContentResolver(),Settings.Global.DEVICE_PROVISIONED, 1);
       Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE,1);
 
        // remove thisactivity from the package manager.
        PackageManagerpm = getPackageManager();
        ComponentNamename = new ComponentName(this, DefaultActivity.class);
       pm.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
               PackageManager.DONT_KILL_APP);
        // terminatethe activity.
        finish();
    }
}

不然就直接把这个应用override掉,不要了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Youth King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值