日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

thread - Android 主線程更新UI問題

瀏覽:265日期:2024-08-20 15:52:30

問題描述

本人使用了OKGO的框架, 下載文件,在下載之前創(chuàng)建一個 等待框,在更新進度的回調(diào)中,更新等待框的百分比, 可是爆了如下錯誤!thread - Android 主線程更新UI問題

通過LOG 發(fā)現(xiàn) UI線程ID 不一樣

是什么問題? 求大神解決,以下是源碼~!

public void setDownloadUrl(String url) {if (TextUtils.isEmpty(url)) return;if (dialog == null) { dialog = new ProgressDialog(mainViewImpl.getContext()); dialog.setCancelable(false); dialog.setCanceledOnTouchOutside(false); dialog.setMessage('正在下載文件...'); dialog.setMax(100); dialog.setTitle('軟件更新');}dialog.show();L.i('(外)線程ID: ' + Thread.currentThread().getId());OkGo.get(url)//.tag(this)//.execute(new FileCallback() { //文件下載時,可以指定下載的文件目錄和文件名 @Override public void onSuccess(File file, Call call, Response response) {// file 即為文件數(shù)據(jù),文件保存在指定目錄L.i('成功: ');if (dialog != null && dialog.isShowing()) dialog.dismiss();startUpdate(file); } @Override public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {//這里回調(diào)下載進度(該回調(diào)在主線程,可以直接更新ui)L.i('(內(nèi))線程ID: ' + Thread.currentThread().getId());dialog.setMessage('正在下載文件......' + (int) (progress * 100) + '%'); } @Override public void onError(Call call, Response response, Exception e) {super.onError(call, response, e);L.i('失敗: ');if (dialog != null && dialog.isShowing()) dialog.dismiss(); }}); }

問題解答

回答1:

你使用的是MVP架構,在Presenter中不應該操作View中的控件,而你在Presenter中操作了Dialog這個控件。所以正確的做法應該是下面的:

Interface View{ void showDialog(); void updateDialog(int count); void dismissDialog(); void showError(); void dismissError();}class Presenter{ View view; public Presenter(View view){ this.view=view; } public void setDownloadUrl(String url){ OkGo.get(url)// .tag(this)// .execute(new FileCallback() { //文件下載時,可以指定下載的文件目錄和文件名@Overridepublic void onSuccess(File file, Call call, Response response) { // file 即為文件數(shù)據(jù),文件保存在指定目錄 view.dismissDialog();} @Overridepublic void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) { view.update((int)progress);} @Overridepublic void onError(Call call, Response response, Exception e) { super.onError(call, response, e); view.dismissDialog(); view.showError();} }); } } 回答2:

你已經(jīng)打印出downloadProgress()方法執(zhí)行的環(huán)境不是UI線程,那么你把

dialog.setMessage('正在下載文件......' + (int) (progress * 100) + '%');

的執(zhí)行放在UI線程就可以了.

runOnUiThread(new Runnable() { @Override public void run() {dialog.setMessage('正在下載文件......' + (int) (progress * 100) + '%'); }});

||-------------------------補充 -------------------------||

我剛剛也打印了log,在ui線程和子線程中:

03-03 15:20:54.592 30842-30842/com.didikee.commondependence E/test: Out-->ThreadName: main id: 103-03 15:20:54.592 30842-30891/com.didikee.commondependence E/test: Inner-->ThreadName: main id: 807

主線程的id是1,子線程的id是807,他們的名稱都是main,而線程的名稱是可以指定的:

public Thread(String name) {//這是指定線程名稱的構造函數(shù)init(null, null, name, 0); }

而線程的id卻是內(nèi)部生成的,不可以手動指定,也就是說線程的名稱展示成什么并沒有說服力,id才是唯一,兩個id不一樣就不是同一線程,與主線程id不一樣那不一樣的那個就不是主線程,題主不知道糾結什么,可以去看Thread類的源碼:

tid = nextThreadID();....private static synchronized long nextThreadID() {return ++threadSeqNumber; }回答3:

下載任務執(zhí)行在UIThread將會阻塞界面,為了不影響應用體驗,我們都會在異步線程當中執(zhí)行下載任務,而異步線程中執(zhí)行的回調(diào)自然是在異步線程了。Android中最常用的線程通訊機制是Handler:

Handler mHandler = new Handler(Looper.getMyLooper()); handler.post(new Runnable(){@Overridevoid run(){//在這里更新ui就好了} })

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩.com| 亚洲精品欧美| 国产精品精品| 国产一区三区在线播放| 国精品产品一区| 亚洲性色视频| 亚洲综合激情在线| 国产日产精品_国产精品毛片| 国产欧美高清视频在线| 国产精品久久免费视频| 国产白浆在线免费观看| 亚洲无线一线二线三线区别av| 最新日韩av| 亚久久调教视频| 黄色网一区二区| 在线一区电影| 欧美日韩亚洲一区二区三区在线| 日韩精品久久理论片| 美女久久精品| 成人羞羞视频播放网站| 久久av一区| 国产精品亚洲欧美| 亚洲tv在线| a天堂资源在线| 男女激情视频一区| 精品午夜视频| 天堂va蜜桃一区二区三区| 国产精品亚洲综合在线观看| 成人看片网站| 日韩在线观看中文字幕| 黄毛片在线观看| 日本一区二区中文字幕| 日韩免费福利视频| 日韩精品高清不卡| 高清一区二区三区av| 日韩视频在线一区二区三区| 国产一级成人av| 精品中文字幕一区二区三区av| 清纯唯美亚洲综合一区| www成人在线视频| 日本不卡视频在线| 日本久久成人网| 日本少妇精品亚洲第一区| 91精品xxx在线观看| 香蕉久久一区| 99精品综合| 国产精品一国产精品k频道56| 欧美日韩中文一区二区| 国产精品一区二区三区美女| 成人午夜国产| 国产精品115| 蜜臀va亚洲va欧美va天堂| 欧美国产美女| 91精品国产自产在线丝袜啪| 欧美理论视频| 色婷婷色综合| 欧美在线91| 亚洲欧美视频| 久久三级福利| 精品国产亚洲一区二区在线观看| 亚洲日本三级| 午夜国产精品视频| 国产不卡一区| 久久精品av麻豆的观看方式| 欧美va亚洲va日韩∨a综合色| 麻豆精品蜜桃视频网站| 亚洲一区二区日韩| 国产一区日韩一区| 国产中文字幕一区二区三区| 奇米色欧美一区二区三区| 欧美日韩国产免费观看视频| 国产一区一一区高清不卡| 日本欧美一区二区在线观看| 9国产精品视频| 香蕉成人av| 国内精品伊人| 国产欧美日韩影院| 免费日韩av片| 尤物在线精品| 日韩成人三级| 国产一区2区在线观看| 国产毛片久久久| 日韩在线观看一区二区三区| 亚洲主播在线| 亚洲成人一区| 久久久久99| 亚洲午夜天堂| 国产成人黄色| 成人在线视频中文字幕| 九九久久国产| 国产极品一区| 国产精品对白久久久久粗| 婷婷综合国产| 少妇精品久久久一区二区| 国产一级一区二区| 午夜国产精品视频免费体验区| 亚洲v在线看| 88xx成人免费观看视频库| 日韩欧美在线中字| 肉色欧美久久久久久久免费看| 色综合五月天| 高清不卡亚洲| 久久久成人网| 午夜国产精品视频| 免费观看在线综合| 亚洲精品综合| 日韩三区四区| 国产激情欧美| jizzjizz中国精品麻豆| 国产在线看片免费视频在线观看| 成人在线黄色| 亚洲成av在线| 亚洲精品在线观看91| 欧美中文字幕| 日本一区二区中文字幕| 国产精品最新| 精品淫伦v久久水蜜桃| 精品国产乱码久久久久久樱花| 精品亚洲a∨一区二区三区18| 中文字幕在线视频网站| 久久夜夜操妹子| 亚洲欧美综合| 亚洲免费激情| 日韩三区四区| 国产伦理一区| 成人在线视频区| 久久狠狠婷婷| 午夜在线一区二区| 69堂精品视频在线播放| 国产videos久久| 不卡中文一二三区| 最新国产精品| 国产欧美日韩影院| 黑人精品一区| 久久高清国产| 国产精品午夜一区二区三区| 精品国产99| japanese国产精品| 日韩精品电影一区亚洲| 久久不见久久见国语| 日韩免费看片| 视频精品一区二区| 国产亚洲精品美女久久久久久久久久| 久久伊人亚洲| 91高清一区| 91精品国产一区二区在线观看| 国产第一亚洲| 亚洲在线一区| 久久三级毛片| 红桃视频欧美| 国产精品欧美三级在线观看| 国产在线看片免费视频在线观看| 亚洲视频播放| 国产精品欧美三级在线观看 | 麻豆亚洲精品| 国产欧美日韩| 久久国产日韩| 欧美一区久久| 国产麻豆久久| 911精品国产| 性欧美xxxx免费岛国不卡电影| 亚洲毛片在线| 伊人久久视频| 日韩精品一区二区三区中文在线 | 久久www成人_看片免费不卡| 国产精品色在线网站| 欧美不卡在线| 国产精品成人3p一区二区三区| 久久久国产精品一区二区中文| 日韩精品久久理论片| 成人在线网站| 国产欧美在线观看免费| 亚洲性图久久| 国产欧美日韩精品一区二区三区| 色天使综合视频| 国产午夜一区| 伊人久久亚洲影院| 97精品国产| 蜜桃视频免费观看一区| 极品av在线| 欧美日韩a区| 中文精品视频| 国产色播av在线| 91大神在线观看线路一区| 伊人久久大香线蕉av不卡| 国产极品模特精品一二| 在线一区二区三区视频| 日韩在线观看不卡| 国产日本精品| 亚洲一区免费| 日韩激情一区| 免费亚洲一区| 日韩在线麻豆| 亚洲激精日韩激精欧美精品| 97精品国产一区二区三区| 国产精品中文字幕制服诱惑| 天堂成人免费av电影一区| 91精品综合| 日韩成人a**站| 国产精品亚洲二区|