一个Android 程序默认情况只有一个进程,但是一个进程可以有多个线程。其中有一个UI 线程也称为UI主线程,UI Thread在Android程序运行的时候就被创建,主要是负责控制UI界面的显示、更新和控件交互。所有的Android应用程序组件----包括Activity、Service、Broadcast Receiver都在应用程序的主线程中运行。因此,任何组件中的费时操作处理都可能阻塞所有其他的组件、包括Service和可见的Activity。

  在Android 中,对未响应的定义是:Activity对一个输入事件在5s内没有响应,或者Broadcast Receiver在10s内没有完成他的onReceive处理程序。对于任何不用直接和用户界面进行交互的重要处理,使用后台线程技术处理是非常重要的,将文件操作、网络交互、数据库、复杂计算调度到后台线程中完成非常重要,以免阻塞主线程。

方法一:Thread+Handler

开启一个新线程:new Thread(new MyThread()).start();

//通过Handler物件,通知主线程UI Thread来更新界面    Handler myHandler=new Handler(){        //此方法主要用于更新UI        public void handleMessage(Message msg){            switch(msg.what){                //根据Thread返回的标识进行相应的处理            }        }    };        class MyThread implements Runnable{        public void run(){            int what=0;            //将耗时操作放到这里处理                        //to-do                        //将标识发给Handler            myHandler.obtainMessage(what).sendToTarget();        }    }

方法二:使用AsyncTask运行异步线程。

  AsyncTask为将耗时操作移到后台线程并在操作完成后同步更新UI线程实现了最佳实践模式。他有助于将事件处理程序与GUI线程进行同步,允许通过更新视图和其他UI元素来报告进度或者在任务完成后发布结果。

  要创建一个新的异步任务,需要扩展AsyncTask类,指定要使用的参数类型:

public class MyAsyncTask extends AsyncTask {    @Override    protected Object doInBackground(Object... arg0) {        // TODO Auto-generated method stub                //将耗时操作放到此方法中来处理        return null;    }    @Override    protected void onPostExecute(Object result) {        // TODO Auto-generated method stub                //更新UI,起到了handler的作用    }    }

运行异步任务:

new MyAsyncTask().execute();

更多相关文章

  1. Android控件编辑时键盘弹起与关闭处理
  2. Android中对Log日志文件的分析
  3. Android中的线程机制
  4. 比較具体的handle机制
  5. Android(安卓)Handler 用法
  6. Android(安卓)开发知识收藏夹(2)
  7. Android面试系列文章2018之Android部分事件分发机制篇
  8. Android应用程序键盘(Keyboard)消息处理机制分析
  9. android位图颜色模式的问题

随机推荐

  1. 小程序版 玩Android(安卓)客户端
  2. Android(安卓)基础教程之-------Android(
  3. [原]Android应用程序在新的进程中启动新
  4. [置顶] android下调试声卡驱动之概述
  5. Android将获取到文件的uri转换为字符串的
  6. Android(安卓)AIDL远程调用
  7. Android中禁用掉多点触控
  8. android 设置View
  9. 普林斯顿大学屏蔽Android设备
  10. videoview小例