• android_handler(二)


    这篇记录 android 消息机制中。WorkThread 模拟向网络訪问数据,获得数据后,返回 message 发送给 MainThread ,并改动 TextView 的 text 的这种一个步骤。(MainThread ← WorkThread)。

    步骤:
    1、在 MainThread 中创建一个 handler 对象。复写 handlemessage() 方法。
    2、WorkThread 调用 handermessage() 的 sendMessage() 方法发送消息到消息队列
    3、looper 在消息队列中取出消息对象,交给 MainThread 的handlemessage() 方法处理。

    代码:

    layout:

    <TextView 
            android:id="@+id/textViewId"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="数据"/>
        
        <Button
            android:id="@+id/buttonId"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/textViewId"
            android:text="发送消息" />
    activity:
    package com.away.b_07_handler02;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
    	private TextView textView;
    	private Button button;
    
    	private Handler handler;
    
    	@Override
    	protected void onCreate(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();
    
    		button.setOnClickListener(new ButtonListener());
    	}
    
    	class MyHandler extends Handler {
    		@Override
    		public void handleMessage(Message msg) {
    			System.out.println("handlerMessage ---->> :" + Thread.currentThread().getName());
    			String s = (String) msg.obj;
    			textView.setText(s);
    		}
    	}
    
    	class ButtonListener implements OnClickListener {
    		@Override
    		public void onClick(View arg0) {
    			Thread t = new NetworkThread();
    			t.start();
    		}
    	}
    
    	class NetworkThread extends 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); 这样的做法是错误的,由于在android系统其中,仅仅有mainthread其中才干操作UI
    			Message msg = handler.obtainMessage();
    			msg.obj = s;
    			// sendMessage()方法,不管是在主线程其中发送还是在workers thread其中发送,都是能够的
    			handler.sendMessage(msg);
    		}
    	}
    
    }
    

    效果:

    欢迎交流 http://blog.csdn.net/ycwol/article/details/42066449

  • 相关阅读:
    Thinkphp5 对接百度云对象存储 BOS (上传、删除)
    php 删除富文本编辑器保存内容中的其他代码(保留中文)
    ffmreg thinkphp 控制器 获取音频视频详细信息(获取时长)
    selenium+testng+java+poi进行excel的数据参数化
    linux中磁盘配额管理
    linux中挂载和卸载文件系统
    linux中vi编辑器的练习
    Linux基础命令
    Nginx流量复制
    Python脚本
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7148835.html
Copyright © 2020-2023  润新知