Android非同步任務
Android提供的非同步任務方法(如果只是呼叫一次,那就不推薦用這個方法,因為這個非同步任務內部有執行緒池,最少開啟5個,保持活動的有10個,最大支援128個)
/**
* 第一個引數:執行非同步任務傳遞的引數 在execute()方法裡傳入引數
* 第二個引數:執行非同步任務的進度
* 第三個引數:非同步任務的返回值
*/
new AsyncTask<Context, Integer, List<ContactInfo>>(){
@Override
protected List<ContactInfo> doInBackground(Context... params) {
try {
publishProgress(1);//這個引數傳遞給了onProgressUpdate方法
Thread.sleep(1000);
publishProgress(30);
Thread.sleep(1000);
publishProgress(70);
Thread.sleep(1000);
publishProgress(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
infos = ContactInfoProvider.getContactInfos(params[0]);
return infos;//這個方法的返回值傳到了onPostExecute方法引數中
}
@Override
protected void onProgressUpdate(Integer... values) {
int number = values[0];
Toast.makeText(getApplicationContext(), "當前進度:"+number, Toast.LENGTH_SHORT).show();;
super.onProgressUpdate(values);
}
@Override
protected void onPreExecute() {
ll_select_contact.setVisibility(View.VISIBLE);
super.onPreExecute();
}
@Override
protected void onPostExecute(List<ContactInfo> result) {
System.out.println(result.size());
ll_select_contact.setVisibility(View.INVISIBLE);
lv_select_contact.setAdapter(new ContactAdapter());
super.onPostExecute(result);
}
}.execute(this);//傳遞引數給非同步任務
自定義非同步方法
import android.os.Handler;
import android.os.Message;
public abstract class MyAsynTask {
public abstract void onPreExecute();//執行耗時任務之前要執行的操作(例如View的顯示)
public abstract void doInBackground();//需要開啟新執行緒的操作,在這個方法裡執行
public abstract void onPostExecute();//執行完耗時操作後要執行的方法(例如View的隱藏)
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
onPostExecute();
}
};
public void execute() {
onPreExecute();
new Thread() {
public void run() {
doInBackground();
handler.sendEmptyMessage(0);
};
}.start();
}
}
相關文章
- Android中非同步任務(AsyncTask)Android非同步
- Android的AsyncTask非同步任務淺析Android非同步
- 在Android上測試非同步任務Android非同步
- Android非同步任務類實現方案Android非同步
- 同步任務與非同步任務執行順序非同步
- servlet非同步任務Servlet非同步
- Android執行緒管理之AsyncTask非同步任務Android執行緒非同步
- js的setTimeout和Promise—同步非同步和微任務巨集任務JSPromise非同步
- SpringBoot與非同步任務、定時任務、郵件任務Spring Boot非同步
- Celery非同步任務框架非同步框架
- AsyncTask非同步任務類非同步
- 終止非同步任務非同步
- Android 非同步任務知識梳理(1) AsyncTask 原始碼解析Android非同步原始碼
- Android 非同步任務知識梳理(3) AsyncQueryHandler 原始碼解析Android非同步原始碼
- MemQ 實現非同步任務MQ非同步
- 非同步任務取消、超時非同步
- django + redis + celery 非同步任務DjangoRedis非同步
- JavaScript有同步任務和非同步任務,瀏覽器是怎麼處理的?JavaScript非同步瀏覽器
- 前端急速解決非同步之微任務和巨集任務前端非同步
- Django配置celery執行非同步任務和定時任務Django非同步
- 關於非同步方法中的巨集任務與微任務非同步
- Django 如何使用 Celery 完成非同步任務或定時任務Django非同步
- Android非同步、延遲和定時任務的簡易用法Android非同步
- Android 非同步任務知識梳理(2) HandlerThread 原始碼解析Android非同步thread原始碼
- Tornado非同步筆記(1):非同步任務非同步筆記
- 理解JavaScript概念系列--非同步任務JavaScript非同步
- 非同步任務編排CompletableFuture非同步
- Android和iOS開發中的非同步處理(二)——非同步任務的回撥AndroidiOS非同步
- Android和iOS開發中的非同步處理(三)——多個非同步任務協作AndroidiOS非同步
- SpaceVim 下的非同步任務系統非同步
- 深入理解安卓非同步任務AsyncTask安卓非同步
- AsyncTask實現非同步任務執行非同步
- 等待多個非同步任務的方法非同步
- 用CompletableFuture實現非同步任務非同步
- Spring @Async開啟非同步任務Spring非同步
- Django 使用 Celery 實現非同步任務Django非同步
- Android 效能優化之使用執行緒池處理非同步任務Android優化執行緒非同步
- 函式計算非同步任務能力介紹 - 任務觸發去重函式非同步