创建线程的两种方式
1 继承 Thread
2 接口 Runnabe
start() 开启一个线程
sleep(时间) 线程的休眠
interrupt 中断线程
4Handle刷新ui
信息处理类,运行我们发送一个消息和处理Message和Runable的信息队列MessageQueue
回调接口 handleMessage(){} 更新ui处理信息
sendMessage() 发送一个消息
sendEmptyMessage() 发送一个空消息
sendMessageAtTime()定时发送消息
sendMessageDelayed()延迟多少时间发送
消息类
Message message = new Message()
message.what =1001;
message.obj = "333fdsd"
package com.yifei.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private int num = 0;
private int[][] position = new int[][]{
{100, 380}, {280, 380}, {470, 380},
{95, 600}, {280, 600}, {460, 600},
{90, 900}, {280, 900}, {460, 900}
};
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1001:
int index = msg.arg1;
imageView.setX(position[index][0]); //设置图片的坐标
imageView.setY(position[index][1]);
imageView.setVisibility(View.VISIBLE);//设置图片显示
break;
default:
return;
}
}
};
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout = findViewById(R.id.frame);
imageView = findViewById(R.id.imageView);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int index =0;
while (!Thread.currentThread().isInterrupted()){
index = new Random().nextInt(position.length); //产生一个int类型的随机数
Message message = handler.obtainMessage();//从消息池中获取一条消息
message.what=1001; //标识一条消息是谁发送的
message.arg1 = index;
handler.sendMessage(message);
try {
Thread.sleep(new Random().nextInt(500)+300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start(); //启动线程
imageView.setOnTouchListener(new View.OnTouchListener() { //设置触摸的监听
@Override
public boolean onTouch(View v, MotionEvent event) {
imageView.setVisibility(View.INVISIBLE); //设置图片消失
num++;
Toast.makeText(MainActivity.this,"您打中了"+num+"只地鼠",Toast.LENGTH_SHORT).show();
return false;
}
});
}
}