在android中,如果涉及网络编程或者某些极耗资源的操作的时候,必然会出现操作时间久的情况
如果这些都在主线程中进行,那程序将会死在那里(android有种机制,当程序持续不响应超过规定时间,会提示用户关闭此程序)

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

android提供两种异步机制:

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

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

它提供了一下方法:

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

doInBackGround()运行后台操作

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

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

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

使用一般创建线程方法:

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

handler message looper

通常有两种方式:

第一种:

//使用messagepublic 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              }}

更多相关文章

  1. Android消息机制原理,仿写Handler Looper源码跨线程通信原理--之
  2. Android UI 线程更新UI也会崩溃???
  3. android银行卡操作步骤
  4. Android创建子线程和回调主线程的几种方式
  5. android 照个图 要开线程 不然永远拍的图都是那么的小
  6. Android中为什么在子线程不能更新UI
  7. android手势操作滑动效果触摸屏事件处理、GestureDetector用法

随机推荐

  1. Android Progrees处理
  2. Android 8.1 系统锁屏显示流程整理
  3. Using C++ Code in Android Application
  4. Android(安卓)6.0运行时权限解决方案
  5. ScrollView中的LinearLayout不能使用andr
  6. Android不错的图片压缩方法
  7. Android 打开关闭闪光灯工具类
  8. android 的C++代码都加 namespace androi
  9. [置顶] 调用Android发短信接口Intent.ACT
  10. Internal error. Please report to https