Android再学习-20141023-Intent-Thread

20141023-Android再学习

Intent对象的基本概念
  1. Intent是Android应用程序组件之一
  2. Intent对象在Android系统中表示一种意图
  3. Intent当中最重要的内容是action与data
Intent对象的基本使用方法
使用Intent在Activity之间传递数据的方法
  1. 在Activity之间可以通过Intent对象传递数据
  2. 使用putExtra()系列方法向Intent对象当中存储数据
  3. 使用getXXXExtra()系列方法从Intent对象当中取出数据
回顾Java当中的线程概念
  1. 线程的两种实现方式
    1. 继承Thread,代表线程
    2. 实现相关接口,代表线程体
  2. 线程的生命周期
  3. 多线程同步
MainThread(UI Thread)和Worker Thread
  • 所有与UI有关的代码写在MainThread当中。
  • 主线程不能阻塞,主线程一般不进行耗时较长的操作,比如联网下载,读取大文件等。
Android当中的线程使用
什么是Handler
Handler、Looper和MessageQueue的基本原理

Handler把消息对象添加到MessageQueue中,Looper负责从MessageQueue的头部不断取出消息对象,取出一个消息对象之后交给Handler处理。

public void onClick(View v){
    //当用户点击按钮是,创建一个消息对象,并使用Handler发送该消息对象
    Message msg = handler.obtainMessage();//获取Message对象
    msg.what = 2;//给Message属性赋值
    handler.sendMessage(msg);//把消息对象放到消息队列当中去
    //1. Looper将会从消息队列当中将消息对象取出,
    //2. Looper将会找到与消息对象对应的Handler对象(每一个消息对象都有一个对应的Handler对象)。
    //3. Looper将会调用消息对象的handleMessage(Message, msg)方法,用于处理该消息对象
}
通过Handler实现线程间的通信
在主线程当中实现Handler的handleMessage()方法
在Worker Thread当中通过Handler发送消息
public class MainActivity enxtends Activity {
    private Textview textview;
    private Button button;
    private Handler handler; //3. 定义一个变量
    @Override
    protected void conCreate(Bundle savedInstanceState) {
        super.onCreate(savedINstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView)findViewById(R.id.textViewId);
        button = (Button)findViewById(R.id.buttonId);

        handler = new Myhandler(); //4.使用Myhandler类生成对象

        button.setOnClickListener(new ButtonListener());//绑定监听器
    }

    class MyHandler extends Handler { 
        //1.首先定义一个handler的实现类,继承Handler
        @Override
        public void handleMessage(Message msg) {
            //2. 然后实现handleMessage方法

            System.out.println("handleMessage--->" + Thread.currentThread().getName()); // 测试说明:打印当前线程的名字

            String s= (String)msg.obj; // 8. 在主线程中将数值取出
            textView.setText(s); //在主线程中操作UI

        }
    }

    class ButtonListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            Thread t = new NetWorkThread();
            t.start();
        }
    }

    class NetworkThread extends Thread {
        //本线程为Worker Thread
        //@Override
        public void run(){

            System.out.println("network--->" + Thread.currentThread().getName()); // 测试说明:打印当前线程的名字

            //模拟访问网络,所以当线程运行时,首先休眠2秒
            try {
                Thread.sleep(2 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //变量s的值,模拟从网络中获取的数据
            String s = "网络中的数据";
            //textView.setText(s);//这样的操作是错误的,安卓系统中UI操作原则上只能在主线程中进行

            Message msg = handler.obtainMessage(); // 5.生成Message对象
            //sendMessage方法无论在主线程中发送还是在Worker Thread中发送都可以,这里在WorkerThread当中发送,然后在主线程将消息取出。
            msg.obj = s; // 6. 把s赋值给obj
            handler.sendMessage(msg); // 7. 调用sendMessage方法发送消息

        }
    }

}

转载于:https://www.cnblogs.com/gcy77/p/4047851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值