sunplusedu的个人空间 https://blog.eetop.cn/sunplusedu [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

【凌阳教育学堂】Android开发中多线程及异步处理

已有 450 次阅读| 2011-12-31 11:52 |个人分类:嵌入式培训

来源: 凌阳教育嵌入式培训
  凌阳教育是全国唯一 “学员就业双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

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 2

    评论
  • 1927

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-14 06:12 , Processed in 0.017650 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部