文档章节

【Android】UI开发之handler应用

t
 timeyoyo
发布于 2015/02/12 00:45
字数 405
阅读 33
收藏 0


先上段代码吧

package com.example.handlerdemo;

import android.app.Activity;
import android.content.res.Resources.Theme;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    myHandler mHandler;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(this);

        // 【1】当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
        // [2]Handler有两个作用
        // <1>定时执行Message和Runnalbe 对象
        // <2>让一个动作,在不同的线程中执行
        mHandler = new myHandler();
    }

    /**
     * 接受消息,处理消息 ,此Handler会与当前主线程一块运行
     * 
     * @author huangc 继承Handler类并且重写handleMessage方法 *
     *         子类需要继承Handler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据
     */
    class myHandler extends Handler {

        public myHandler() {
            super();
            // TODO Auto-generated constructor stub
        }

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            Log.e("huangc", " handleMessage!!! ");
            Bundle b = msg.getData();
            Log.e("huangc", "MSG get!!!!=" + b.get("MSG"));
        }

    }

    /**
     * @author huangc 在Android UI主线程外写一个单独的线程
     */
    class MyThread implements Runnable {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Log.e("huangc", " Runnable!!! ");
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                // TODO: handle exception
            }
            Message msg = new Message();
            Bundle b = new Bundle();
            b.putString("MSG", "OK");
            msg.setData(b);
            // 该线程在执行过程中向handler发送消息
            MainActivity.this.mHandler.sendMessage(msg);

        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        int id = arg0.getId();
        if (id == R.id.button1) {
            // 【2】新起一个线程,跑起来
            MyThread mThread = new MyThread();
            new Thread(mThread).start();

        }

    }
}


© 著作权归作者所有

t
粉丝 3
博文 38
码字总数 10005
作品 0
南京
私信 提问
Android 进程和线程模型

Android进程模型 在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了。 在 Linux 中,一...

长平狐
2013/01/06
106
0
Android的进程,线程模型

Android进程模型: 在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了。 在Linux中,一...

Jerikc
2013/03/12
328
0
android应用开发简单理解

做了个应用,总结下对于android 应用的简单理解 从上图可以简单看出,主线程启动,这里把各种操作称为action,主要分为3部分: ui(视图绘制)、event(事件处理)和other(数据或网络等处理) 1.当...

blackylin
2013/06/18
649
2
Android 异步加载解决方案

Android的Lazy Load主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,...

Pandora
2012/08/14
2.3K
1
Android之Handler用法总结

方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 Thread( Runnable() { r...

霞女
2014/04/16
27
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
5
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
6
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
4
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部