安卓ui线程优先级

时间:2021-11-07 17:25:07

最近在做静默安装发现在做下载按钮状态安装的时候 例如一个TextView文字的修改,起初代码格式为如下所示

                btnDown.setTag(TAG_INSTALLING);
                updateDownloadBtnState(btnDown,
                        game, DownloadState.Finished);//更新按钮状态 此方法包含按钮文字和颜色
                        ModMgr.getGameDownloadMgr().installApk(context, game);//安装apk
                        game.mIsInstalling = false;

发现在安装中会出现按钮状态还没有改变的时候 apk安装环节就已经执行,所以因此推测在底层ui刷新和其他操作并不是线性执行,虚拟机先执行安装操作后才执行按钮刷新操作,所以做了以下修改。

                btnDown.setTag(TAG_INSTALLING);
                updateDownloadBtnState(btnDown,
                        game, DownloadState.Finished);
                MessageManager.getInstance().asyncRun(100, new Runner() {
                    @Override
                    public void call() {
                        ModMgr.getGameDownloadMgr().installApk(context, game);
                        game.mIsInstalling = false;
                    }
                });//此方法作用为在主线程延时100秒后执行 其中调用了handler.postDelayed实现

在延时主线程安装操作100毫秒以后 按钮状态改变后才执行安装操作 达成所期望效果。