免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1383 | 回复: 1
打印 上一主题 下一主题

[Android] Android 线程 thread 两种实现方法! [复制链接]

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-06 13:11 |只看该作者 |倒序浏览
这篇文章中有三点需要提前说明一下,

一:
在android中有两种实现线程thread的方法:
一种是,扩展java.lang.Thread类
另一种是,实现Runnable接口

二:
Thread类代表线程类,它的两个最主要的方法是:
run()——包含线程运行时所执行的代码
Start()——用于启动线程

三:
Handler 机制,它是Runnable和Activity交互的桥梁,在run方法中发送Message,在Handler里,通过不同的Message执行不同的任务。
(Handler的设计实际上是为了应用程序内其他线程和主线程进行通信,因为只有主线程才能更新UI,其他线程不行)
下面分别给出两种线程的实现方法,其一,扩展java.lang.Thread类,也就是把run()方法写到线程里面:
  1. package com.my;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. public class Demo_For_Copy extends Activity
  11. {
  12.         public Button button;
  13.        
  14.         public Handler mHandler=new Handler()
  15.         {
  16.                 public void handleMessage(Message msg)
  17.                 {
  18.                         switch(msg.what)
  19.                         {
  20.                         case 1:
  21.                                 button.setText(R.string.text2);
  22.                                 break;
  23.                         default:
  24.                                 break;               
  25.                         }
  26.                         super.handleMessage(msg);
  27.                 }
  28.         };
  29.        
  30.         /** Called when the activity is first created. */
  31.         @Override
  32.         public void onCreate(Bundle savedInstanceState)
  33.         {
  34.                 super.onCreate(savedInstanceState);
  35.                 setContentView(R.layout.main);
  36.                 button=(Button)findViewById(R.id.button);

  37.                 Thread thread=new Thread(new Runnable()
  38.                 {
  39.                         @Override
  40.                         public void run()
  41.                         {
  42.                                 Log.e("1111", "111111111");
  43.                                 // TODO Auto-generated method stub
  44.                                 Message message=new Message();
  45.                                 message.what=1;
  46.                                 mHandler.sendMessage(message);
  47.                         }
  48.                 });
  49.                 thread.start();
  50.         }
  51. }
复制代码
其二,实现Runnable接口,让类实现Runnable接口,然后把run方法单独提出来:
  1. package com.my;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.LinearLayout;
  11. public class Title_Change_Demo extends Activity implements Runnable
  12. {
  13.         public Button button;
  14.         public LinearLayout my_layout;
  15.        
  16.         public Handler mHandler=new Handler()
  17.         {
  18.                 public void handleMessage(Message msg)
  19.                 {
  20.                         switch(msg.what)
  21.                         {
  22.                         case 1:
  23.                                 button.setText(R.string.text2);
  24.                                 break;
  25.                         default:
  26.                                 break;                       
  27.                         }
  28.                         my_layout.invalidate();
  29.                         super.handleMessage(msg);
  30.                 }
  31.         };
  32.        
  33.         /** Called when the activity is first created. */
  34.         @Override
  35.         public void onCreate(Bundle savedInstanceState)
  36.         {
  37.                 super.onCreate(savedInstanceState);
  38.                 setContentView(R.layout.main);
  39.                
  40.                 button=(Button)findViewById(R.id.button);
  41.                 my_layout=(LinearLayout)findViewById(R.id.my_layout);
  42.                
  43.                 Thread thread=new Thread(this);
  44.                 thread.start();
  45.         }
  46.        
  47.         @Override
  48.         public void run()
  49.         {
  50.                 Log.e("ok", "111111111");
  51.                 // TODO Auto-generated method stub
  52.                 Message message=new Message();
  53.                 message.what=1;
  54.                 mHandler.sendMessage(message);
  55.         }
  56. }
复制代码

论坛徽章:
80
20周年集字徽章-庆
日期:2020-10-28 14:09:1215-16赛季CBA联赛之北京
日期:2020-10-28 13:32:5315-16赛季CBA联赛之北控
日期:2020-10-28 13:32:4815-16赛季CBA联赛之天津
日期:2020-10-28 13:13:35黑曼巴
日期:2020-10-28 12:29:1520周年集字徽章-周	
日期:2020-10-31 15:10:0720周年集字徽章-20	
日期:2020-10-31 15:10:07ChinaUnix元老
日期:2015-09-29 11:56:3020周年集字徽章-年
日期:2020-10-28 14:14:56
2 [报告]
发表于 2015-09-17 09:36 |只看该作者
转给有需要的人
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP