android的Looper例子

直接贴代码

MsgThread.java

package bb.aa.looperdemo;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

public class MsgThread extends Thread{

    public static final String TAG = "MsgThread";

    public Handler _handler = null;

    @Override
    public void run() {
        Log.d(TAG, "进入Thread的run");

        Looper.prepare();

//        _handler = new Handler(Looper.getMainLooper()){
        _handler = new Handler(Looper.myLooper()){
            @Override
            public void handleMessage(Message msg){
                Log.d(TAG, "获得了message");
                super.handleMessage(msg);
            }
        };
        Looper.loop();
    }

    public void sendMsg(int what, Object object){
        Message message = _handler.obtainMessage();
        message.what = what;
        message.obj = object;
        _handler.sendMessage(message);
    }
}

MainActiivty.java

package bb.aa.looperdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private MsgThread _msgThread = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startThread();

        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                _msgThread.sendMsg(123, null);
            }
        });
    }

    private void startThread(){
        _msgThread = new MsgThread();
        _msgThread.start();
    }
}
时间: 2024-08-04 08:34:13

android的Looper例子的相关文章

android导入官方例子

android导入samplefile-->project-->Android-->Android Sample Project android导入官方例子,布布扣,bubuko.com

Android查看网络图片例子

1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_hei

Android Service demo例子使用详解

Android Service demo例子使用详解\ 概述Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 Service 则没有 UI 界面,所有的操作都是基于后台运行完成.并且 Service 跟 Activity 一样也是可以由其它的应用程序调用启动的,而且就算用户切换了应用程序,Service 依旧保持运行.一个组件如果与 Service 进行了绑定( bind ),就可以跟 Service 进行数

Android 线程 Looper.prepare()、Looper.loop() 使用

优化项目过程中发现了一个很Low的问题,整理一下,备忘: 说问题之前先看下HandlerThread的定义 一个封装了looper的线程: Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息. 注:写在Looper.loop()之后的代码不会被立即执行,当调用后mHandler.get

Android RecyclerView 使用例子

1.RecyclerView是什么? RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出.看到这也许有人会问,不是已经有ListView了吗,为什么还要RecylerView呢?这就牵扯到第二个问题了. 2.RecyclerView的优点是什么? 根据官方的介绍RecylerView是ListView的升级版,既然如此那RecylerView必

Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。

1.线程间通信机制 首先,looper.handler.messagequeue三者共同实现了android系统里线程间通信机制. 如在A.B两个子线程之间需要传递消息,首先给每个子线程绑定一套handler.looper.messagequeue机制,然后这三个对象都与其所属线程对应. 然后A线程通过调用B线程的Handler对象,发送消息.这个消息会被Handler发送到B线程的messagequeue中,而属于B线程的Looper对象一直在for循环里无限遍历MessageQueue, 一

Android的Looper和Handler消息处理机制详解

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理. Handler:处理者,负责Message的发送及处理.使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等. MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行.当然,存放Message并非实际意义的保存,而是将Message以链表的方

Android中Looper的quit方法和quitSafely方法

Looper是通过调用loop方法驱动着消息循环的进行: 从MessageQueue中阻塞式地取出一个消息,然后让Handler处理该消息,周而复始,loop方法是个死循环方法. 那如何终止消息循环呢?我们可以调用Looper的quit方法或quitSafely方法,二者稍有不同. Looper的quit方法源码如下: public void quit() { mQueue.quit(false); } Looper的quitSafely方法源码如下: public void quitSafel

Android 自定义字体 例子

1.选择你喜欢的字体,下载字体文件 字体参考:http://www.creativebloq.com/graphic-design-tips/best-free-fonts-for-designers-1233380 2.项目assets文件中新建font文件夹,将你的字体文件放在该文件夹中 3.项目代码 布局代码: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <Line