日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...

發布時間:2024/7/23 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小弟新手一枚,我先來說說我自己在項目中的做法。因為小弟只有JAVAWEB的基礎所以只能使用線程池來處理線程之間的切換

1.為了使APP不出現卡頓和內存的低消耗。我是用了synchronized 和用一個Map 來限定每次只能運行一條子線程,Map 鍵:TAG 線程任務標記 、值:FutureTask線程任務,

2.當然線程之間的切換仍然還是使用handle,只是在等待分線程執行完,當然分線程也會由限定時間。

下面來看看代碼:

public class OCThreadExecutor extends ThreadPoolExecutor {

private Map runnableMap;

public OCThreadExecutor(int maxRunningThread, String poolName) {

super(maxRunningThread, maxRunningThread, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new OCThreadFactory(poolName));

runnableMap = new HashMap<>();

}

以上是自定義線程池,帶參的構造方法;

static class OCThreadFactory implements ThreadFactory {

private final String name;

public OCThreadFactory(String name) {

this.name = name;

}

public String getPoolName() {

return name;

}

@Override

public Thread newThread(@NonNull Runnable r) {

return new OCThread(r, name);

}

}

static class OCThread extends Thread {

public OCThread(Runnable runnable, String name) {

super(runnable, name);

setName(name);

}

@Override

public void run() {

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);

super.run();

}

}

實現線程工廠;

重點來了:

/**

* 執行任務

* @param task??任務對象

* @param tag? ?任務唯一TAG

*/

public void submit(FutureTask task , String tag){

synchronized (this){

//執行線程

if ( !runnableMap.containsKey(tag) ){

//如果池內沒有相同的任務則可以執行

Log.d("OCThreadExecutor", "Task submitting TAG: "+tag);

runnableMap.put(tag, task);

submit(task);

}else{

Log.d("OCThreadExecutor", "Pool: "+((OCThreadFactory)getThreadFactory()).getPoolName()+" Same task TAG. Skipped. "+tag);

}

}

}

以上提交方法的tag值是為了唯一識別正在執行的線程,或者判斷該線程有沒有在執行。

如果沒有將執行該任務,且添加進Map

下面是得到URL訪問網絡:

protected NetworkHelper() {

handler = new Handler(Looper.getMainLooper());

httpClient = new OkHttpClient();

threadExecutor = new OCThreadExecutor(1,"networkTHS");

}

public static NetworkHelper getInstance() {

if (networkHelper == null){

networkHelper = new NetworkHelper();

}

return networkHelper;

}

/**

* UI 線程

* @param runnable 在UI線程運行的任務

*/

private void runOnUIThread(@NonNull Runnable runnable){

boolean done = handler.post(runnable);

while (!done){

handler = new Handler(Looper.getMainLooper());

runOnUIThread(runnable);

}

}

任務在UI線程中運行,知道任務完成,這是最讓我糾結的地方,但是在項目中有沒有出現過問題,可能是我現在的訪問量不大吧!!

下面是一個獲取項目文章的線程方法:

/**

* 讀取文章

* @param onArtcleLoadCallback??讀取進度回調

* @param needToCacheImage??是否進行緩存圖片網址以供主界面滾動顯示

* @param args??附帶的參數

*/

public void loadArtcles(@Nullable OnArtcleLoadCallback onArtcleLoadCallback ,@NonNull boolean needToCacheImage ,@NonNull String[] args){

threadExecutor.submit(new FutureTask<>(new GetArtclesThread(onArtcleLoadCallback, needToCacheImage, args)),GetArtclesThread.TAG+args[2]);

}

下載文章線程:

/**

* 獲取文章以及緩存首頁滾動圖片的任務

*/

class GetArtclesThread implements Callable{

public static final String TAG = "GetArtclesThread";

private OnArtcleLoadCallback onArtcleLoadCallback;

private boolean needToCacheImage;

private ArrayList artcles = null;

private String[] args;

public GetArtclesThread(OnArtcleLoadCallback onArtcleLoadCallback, boolean needToCacheImage ,String[] args) {

this.onArtcleLoadCallback = onArtcleLoadCallback;

this.needToCacheImage = needToCacheImage;

this.args = args;

}

@Override

public String call() throws Exception {

//先檢查OKHttp是否有效

if (httpClient == null){

httpClient = new OkHttpClient();

}

//如果參數數量大于等于4,則執行請求

if (args != null && args.length >= 4){

try {

artcles = requestData();

} catch (IOException e) {

Log.d(TAG, "Exception:"+e);

failed(null,e);

return null;

}

}else {

failed("無效的請求參數",null);

return null;

}

completed();

return null;

}

這是一個獲取文章的任務,這個任務會在線程池中執行,在回調方法中會先執行請求文章,當獲取文章完成之后才會去UI線程顯示文章。

目前只知道這種方式,不知道大家有沒有更好的方法???求教

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的android判断主线程_android中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 38激情| 亚洲午夜久久久久久久久红桃 | 小香蕉影院 | 免费禁漫天堂a3d | 国产精品久久9 | 亚洲成人黄色在线 | 亚洲欧洲色图 | 一级黄色片国产 | 免费日韩成人 | 日本三级久久久 | 在线视频观看国产 | 中文字幕校园春色 | 在线播放精品 | 高跟91娇喘 | 欧美色影院| 成人在线免费网站 | 国产激情网站 | 午夜两性网 | av高清在线免费观看 | 秋霞精品一区二区三区 | 色偷偷影院| 亚洲av无码一区二区三区性色 | 日本色视| 毛片久久久久 | 欧美极品少妇无套实战 | 欧美乱码精品一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 蜜色av| 亚洲一本二本 | 韩日视频在线 | 色阁av| 操白虎逼| 欧美人妻精品一区二区免费看 | 欧洲一区在线观看 | 久久免费看少妇 | 一本久久精品一区二区 | 亚洲无套 | 欧美一级一片 | 91精品福利在线 | 我要看一级片 | 日韩一卡二卡在线 | 被黑人各种姿势猛c哭h文1 | 少妇xxxx| 色屁屁草草影院ccyycom | 看毛片网 | 久操综合 | 老司机免费视频 | 在线观看亚洲大片短视频 | fc2ppv在线播放 | 欧美成人高清视频 | 国产精品乱码一区二区三区 | 欧美成人午夜精品免费 | 动漫精品一区 | 荡女精品导航 | 色狠狠综合网 | 伊人激情在线 | 青春草在线视频免费观看 | 精品美女久久久久 | 国产无遮挡又黄又爽免费视频 | 青青草97国产精品麻豆 | 88福利视频| 欧美日本韩国一区二区 | 欧美韩日一区二区 | 青娱网电信一区电信二区电信三区 | 日韩在线精品视频 | 男人的天堂一区二区 | 久久com| 日韩一区二区影院 | 91在线观看视频 | 成年免费在线观看 | 成人激情视频在线观看 | 欧美日韩中文字幕一区 | 天天干夜夜骑 | 欧美在线不卡 | 欧美日韩1区 | 越南性xxxx精品hd | 干干干日日日 | 日韩精品综合 | 欧美日韩中文一区 | 在线观看9.1| 一级片免费网址 | 西西人体44www大胆无码 | 污视频免费在线观看 | 国产无精乱码一区二区三区 | 国产免费福利视频 | 光棍天堂av | www.爱色av.com | 韩国精品一区二区 | 黄色综合 | 国产美女激情 | 午夜精品一区 | 91丨porny丨国产入口 | 无码一区二区波多野结衣播放搜索 | 香蕉视频97 | 一级黄色小视频 | 看片网址国产福利av中文字幕 | 用舌头去添高潮无码视频 | www.久久av| 操人视频网站 |