设为首页 加入收藏

TOP

Android的两种异步机制
2014-11-24 13:00:15 来源: 作者: 【 】 浏览:0
Tags:Android 异步 机制

如果这些都在主线程中进行,那程序将会死在那里(Android有种机制,当程序持续不响应超过规定时间,会提示用户关闭此程序)


所以只能使用非主线程来处理这些操作。


Android提供两种异步机制:


一是使用asynctask类和使用标准线程机制


Asynctask提供一些抽象类的方法,能是用户不用创建线程的情况下管理后台操作。


它提供了一下方法:


obPreExecute() 运行于ui进程,用于进入后台操作前的操作


doInBackGround()运行后台操作


publishProgress()周期性通知UI线程有关后台操作的进度


onPostExecute() 后台操作完成后,调用此方法


非常方便的实现了一个后台进程的周期


使用一般创建线程方法:


使用此方法创建线程,如果要与主线程通信,比较麻烦,要实现消息机制:


handler message looper


通常有两种方式:


第一种:


//使用message public class MyHandler extends Activity { static final String TAG = "Handler"; Handler h = new Handler(){ public void handleMessage (Message msg) { switch(msg.what) { case HANDLER_TEST: Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + "\n"); break; } } }; static final int HANDLER_TEST = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() + "\n"); new myThread().start(); setContentView(R.layout.main); } class myThread extends Thread { public void run() { Message msg = new Message(); msg.what = HANDLER_TEST; h.sendMessage(msg); Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + "\n"); } } }


第二种,使用handler post


Handler mHandler = new Handler();//主线程中创建,主线程默认开启就创建Looper,这里就是默认使用了主线程的looper new Thread(){ public void run(){ mHandler.post(new Runnable() { public void run() { //更新主线程的ui } }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Shell 跟Java 相互调用和获取结果 下一篇Android工程文件下assets文件夹与..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)