您的位置:笔笔发 SOHO人家 嵌入式操作系统领域 正文
内容搜索
笔笔发:技术产业信息平台----成就有识之士创业梦想的殿堂
热门内容
推荐内容
【凌阳教育学堂】Android开发中多线程及异步处理


来源: 凌阳教育嵌入式培训

  凌阳教育是全国唯一 “学员就业双100%品牌”,保证“学员100%就业”,保证“学员100%满意就业”。凌阳教育也是全国唯一“按班公布学员就业去向诚信机构”,每个班 所有学员来自哪个学校就业后签约哪家企业都真实发布。截止2011年9月,凌阳教育学员已连续27期“双100%就业”。凌阳教育是全国唯一“原厂嵌入式 培训机构”,以凌阳科技产业链企业的人才需求为契机,先后与2500多家企业建立学员就业合作关系。

  1.用户态线程:
由于内核并没有对多线程进程的支持,因此,内核中只有单线程进程的概念, 而多线程进程是通过一个和应用程序连接的函数库实现的。由于内核没有轻量 级进程(线程)的概念,因此它不能独立的对之进行调度,而是由一个线程运 行库来组织线程的调度,其主要工作在于在各个线程的栈之间调度。如果一个进程中的某一个线程调用了一个阻塞的系统调用,该进程就会被阻塞,当然该进程中的 其他所有线程也同时被阻塞,因此UNIX使用了异步I/O机制。

  这种机制主要的缺点在于在一个进程中的多个线程的调度中无法发挥多处理器的优势(如上述的阻塞情况)。

  其优点包括:
A(相对于进程操作而言)某些线程操作的系统消耗大大减少。比如,对属于同一个进程的线程之间进行调度切换时不需要调用系统调用,因此将减少额 外的消耗,往往一个进程可以启动上千个线程也没有什么问题。

  B 用户态线程的实现方式可以被定制或修改以适应特殊应用的要求。这对于多 媒体实时过程等尤其有用。另外,用户态线程可以比核心态线程实现方法的默认情况支持更多的线程。

  LINUX的线程库有NPTL(Native POSIX Thread Library)和LinuxThreads。

嵌入式培训

  2.核心态线程
这种线程的实现方法允许不同进程中的线程按照同一相对优先调度方法进行调度。这有利于发挥多处理器的并发优势。

嵌入式培训

  3.Handler、Looper、MessageQueue介绍
Handler用于异步消息处理,但是Handler自己并不会创建线程。一般Handler用于计划任务和线程间的通信。
在后台线程与UI线程的交互中最常用。原理是:系统启动程序时,会自动为UI线程创建一个消息队列,和用于管理这个消息队列的Looper。在创建的 后台线程时,默认是不会创建Looper和消息队列的(我们自己可以通过调用Looper.prepare()给后台线程创建Looper和消息队列)。
通过给Handler传递不同的Looper实现向不同的线程传递信息。Looper.getMainLooper()会获得UI线程的Looper。

  4.Android多线程与界面交互的方法
*Activity.runOnUIThread(Runnable)
*View.post(Runnable),View.postDelay(Runnable,long)
*Handler
*AsyncTask
下面用一个工程实现了上面四种交互方法

  public class MainActivity extends Activity { 
 
    private TextView txView; 
    private Button button; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        Log.i("RootyInfo", "oncreate"); 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);     
         
        txView=(TextView)findViewById(R.id.textView1); 
        button=(Button)findViewById(R.id.button1); 
        button.setOnClickListener(new OnClickListener() { 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub 
                 
                //创建一个用于展示前三种后台线程和UI线程交互的线程 
                new TestThread(MainActivity.this).start(); 
                 
                //创建一个用于展示AsyncTask实现交互的TestAsyncTask 
                new TestAsyncTask().execute("Test"," AsyncTask"); 
            } 
        }); 
    }  
      
     
    class TestAsyncTask extends AsyncTask 
    { 
        //TestAsyncTask被后台线程执行后,被UI线程被调用,一般用于初始化界面控件,如进度条 
        @Override 
        protected void onPreExecute() { 
            // TODO Auto-generated method stub 
            super.onPreExecute(); 
        } 
 
        //doInBackground执行完后由UI线程调用,用于更新界面操作 
        @Override 
        protected void onPostExecute(String result) { 
            // TODO Auto-generated method stub 
            txView.setText(result); 
            super.onPostExecute(result); 
        } 
 
          //在PreExcute执行后被启动AysncTask的后台线程调用,将结果返回给UI线程 
        @Override 
        protected String doInBackground(String... params) { 
            // TODO Auto-generated method stub 
            StringBuffer sb=new StringBuffer(); 
            for (String string : params) { 
                sb.append(string); 
            } 
            return sb.toString(); 
        } 
         
    } 
    //用于线程间通信的Handler 
    class TestHandler extends Handler 
    { 
         
        public TestHandler(Looper looper) { 
            super(looper); 
            // TODO Auto-generated constructor stub 
        } 
 
        @Override 
        public void handleMessage(Message msg) { 
            // TODO Auto-generated method stub 
            System.out.println("123"); 
            txView.setText((String)msg.getData().get("tag")); 
            super.handleMessage(msg); 
        } 
         
      } 
      //后台线程类 
      class TestThread extends Thread 
      { 
          Activity activity; 
          public TestThread(Activity activity) { 
             
              this.activity = activity; 
          } 
          @Override 
          public void run() { 
             
              //下面代码用来演示Activity.runOnUIThread(Runnable)方法的实现 
              activity.runOnUiThread(new Runnable() {              
                  @Override 
                  public void run() { 
                      // TODO Auto-generated method stub 
                      txView.setText("Test runOnUIThread"); 
                  } 
              }); 
             
              //下面代码用来演示Activity.runOnUIThread(Runnable)方法的实现 
              txView.post(new Runnable() { 
                 
                  @Override 
                  public void run() { 
                      // TODO Auto-generated method stub 
                      txView.setText("Test View.post(Runnable)"); 
                  } 
              }); 
             
              //下面代码用来演示Activity.runOnUIThread(Runnable)方法的实现 
              txView.postDelayed(new Runnable() { 
                 
                  @Override 
                  public void run() { 
                      // TODO Auto-generated method stub 
                      txView.setText("Test View.postDelay(Runnable,long)"); 
                  } 
              }, 1000); 
             
              //下面代码用来演示Handler方法的实现 
              Message msg=new Message(); 
              Bundle bundle=new Bundle(); 
              bundle.putString("tag", "Test Handler"); 
              msg.setData(bundle);             
              new TestHandler(Looper.getMainLooper()).sendMessage(msg); 
                     
              super.run(); 
          } 
         
      } 
    
}

  凌阳教育“学员就业 双100%”的诚信获得了社会的广泛认可,2008年、2009年、2010年,凌阳教育连续三年荣膺新浪“中国十大品牌IT教育机构”、新浪“最具就业 竞争力IT教育机构”、搜狐“中国十大品牌IT培训机构”、网易“中国十大IT教育品牌”荣誉称号。凌阳教育是嵌入式培训领域,唯一全部获得三大门户网站 “十大IT品牌”表彰的机构。

嵌入式培训

凌阳教育嵌入式培训,值得信赖的嵌入式教育品牌!
   http://www.sunplusedu.com/content3558.shtml

 
点这里复制本页地址发送给您QQ/MSN上的好友
相关文章

【凌阳教育学堂】Android开发中进程等级相关
【凌阳教育学堂】Android开发中ANR与Monkey
【凌阳教育学堂】Android开发Info类总结
【凌阳教育学堂】Android开发实现HttpClien
【凌阳教育学堂】Android开发获得多媒体信息
【凌阳教育学堂】Android开发中webService接
【凌阳教育学堂】Android开发返回拍摄的图片
【凌阳教育学堂】Android数据存储SQLite的事
【凌阳教育学堂】Android开发给TextView添加
【凌阳教育学堂】Android中XML文件的三种解
【凌阳教育学堂】Android拦截短信并屏蔽Not
【凌阳教育学堂】Android ListPreference的
【凌阳教育学堂】Android开发中使用第三方j
郑州--深圳嵌入式实训 嵌入式方案解决您一站
WINCE系统手持pos机 - PDA打印功能手持终端
学习嵌入式系统开发需要具备哪些条件?

相关评论


本文章所属分类:首页 SOHO人家 嵌入式操作系统领域


反馈意见和建议