日韩性视频-久久久蜜桃-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中从子线程切换到主线程,但是显得代码很臃肿,请教大牛是怎么自定义的?...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美成人69 | 欧美自拍第一页 | 国产区视频在线 | 麻豆成人免费视频 | 91片看| 上海毛片| 欧美日韩在线中文字幕 | 中文字幕11页中文字幕11页 | 饥渴丰满的少妇喷潮 | 一级视频在线播放 | 91香蕉视频污污 | a天堂资源 | 天天综合永久入口 | 久久久精选 | 日本丰满少妇一区二区三区 | 亚洲av无码专区在线播放中文 | 亚洲一卡一卡 | 国产精品嫩草69影院 | 三级无遮挡 | 性色av一区二区三区四区 | 懂色一区二区三区免费观看 | 久久er99热精品一区二区介绍 | 91成人看 | 亚洲精品国产精 | av福利网址 | 专干老肥女人88av | www.狠狠插 | 欧美日韩国产第一页 | 国产一区不卡在线观看 | 国产第一毛片 | 久久久香蕉视频 | 日日夜夜婷婷 | 午夜视频在线 | 懂色av一区二区三区四区五区 | 韩国午夜激情 | av噜噜| 国产成人在线观看免费网站 | 香港一级纯黄大片 | 日本簧片在线观看 | 香蕉久久夜色精品国产使用方法 | 北条麻妃一区二区三区 | 天天干天天做天天操 | 免费一区 | 中文字幕麻豆 | 你懂的国产在线 | 成人黄色片在线观看 | 国产香蕉视频在线 | 一级裸体片 | 麻豆av网站 | 未满十八岁勿进 | 红桃av在线 | 日韩欧美亚洲在线 | 豆花av在线 | 国产露脸无套对白在线播放 | 国产香蕉视频在线观看 | 毛片哪里看| 玖玖爱这里只有精品 | 亚洲欧美强伦一区二区 | 在线观看污污网站 | 亚洲 欧美 日韩 国产综合 在线 | 亚洲精选国产 | 日韩精品2| 日本高清免费视频 | 国产第一页第二页 | 欧美黄色大片免费观看 | 毛片视频网| 成人免费一区二区三区 | 尤物视频在线观看国产性感 | 天天色天天综合 | 毛片手机在线 | 亚洲v日韩v综合v精品v | 午夜久久剧场 | 夜夜激情网 | 国产91久久精品一区二区 | 久久艹av | 丰满的女人性猛交 | 最近中文字幕 | 亚洲精品在线观看网站 | 日韩专区一区二区三区 | 天天操天天干天天爱 | xxxwww黄色 | 亚洲成人婷婷 | 亚洲porn | 一级黄色片看看 | 男人av的天堂 | 欧美日韩三 | 亚洲精品人妻无码 | 91精品人妻一区二区三区蜜桃欧美 | 国产精品美女久久久久图片 | 裸体裸乳被免费看视频 | 午夜看毛片 | 成人激情免费 | 香蕉视频网页版 | 全黄一级片 | 欧美99视频 | 成人免费毛片入口 | 亚洲一级av毛片 | 原创av | 亚洲精品9999|