android ===Thread 和Runable的基本使用

package com.yifei.myapplication;

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

public class MainActivity extends AppCompatActivity {
    private Button button;
    private static final String TAG = "MainActivity12";

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

        final SaleTickets2 saleTickets2 = new SaleTickets2(6);
        button = findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                SaleTickets thread1 = new SaleTickets(5);
//
//                thread1.start();
//                try {
//                    thread1.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//                Log.d(TAG, "onClick: josin");

               new Thread(saleTickets2).start();
            }
        });
    }


    private class SaleTickets extends Thread{
        private int  tickets=0;
        public SaleTickets(int tickets){
            this.tickets = tickets;
        }
        @Override
        public void run() {
            super.run();
            while (tickets>0){
                saletick();
            }
            Log.d(TAG, "卖完了");
        }

        private void saletick(){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.d(TAG, "saletick: "+tickets+"--name--"+Thread.currentThread().getName());
            tickets--;
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    sleep(5000);
                    Log.d(TAG, "run: 1");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.run();
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    sleep(3000);
                    Log.d(TAG, "run: 2");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.run();
    }

    public class SaleTickets2 implements Runnable{
        private int tickets =0;
        @Override
        public void run() {
            while (tickets>0){
                sole();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
            Log.d(TAG, "票卖完了");

        }

        public  SaleTickets2(int tickets){
            this.tickets = tickets;
        }

        private void sole(){
            Log.d(TAG, "sole: "+tickets+Thread.currentThread().getName());
            tickets--;
        }
    }


}

Message Queue 

Handler

Looper 

Message

消息循环

生成

Message msg = mHandler.obtainMessage()

msg.what = what;

msg.sendToTarget()

MessageQueue queue = mQueue;

if(queue!=null){

msg.target = this;

sent = queue.enqueueMessage(msg.uptimeMills);

}

抽取

Looper me = myLooper()'

MessageQueue queue = me.mQueue;

while(true){

Message msg = queue.next();

if(msg!=null){

if(msg.target==null){

return;

}

msg.target.dispatchMessage(msg)

msg.recycle();

}

}

线程与更新

在主线程UI线程中,如果创建了Handler时不传入Looper对象,那么将直接使用主线程(UI线程)的Looper对象,  在

其他线程里,如果创建handler时,不传入Looper对象,那么,这个Hander将不能接收处理消息,在这种情况下,通用的做法是

class LooperThread extends Thread{
    public Handler mHandler;
    public void run(){
        Looper.prepare();
        mHandler = new Handler(){
            public void handleMessage(Message msg){
                //process incoming messages here
            }
        }
        Looper.loop();

    }

}

在参加Hander 之前,为该线程准备好一个Looper 

Handler 处理消息总是在创建Hander

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值