您的位置:首页 > 移动开发 > Android开发

Android消息机制—倒计时计数器

2017-01-07 10:09 363 查看

1,普通Handler,Thread;

package com.zdsoft.clock1230;

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

public class MainActivity extends AppCompatActivity {
private Button bt_start;
private TextView tv_show;
private int count = 10;

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

initView();
bt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
tv_show.setText(msg.obj + "");
}
}
};
new Thread() {
@Override
public void run() {
while (count >= 0) {
Message message = new Message();
message.what = 1;
message.obj = count;
handler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
}
}
}.start();
}
});
}

private void initView() {
bt_start = (Button) findViewById(R.id.bt_start);
tv_show = (TextView) findViewById(R.id.tv_show);
}
}


2、Looper

package com.zdsoft.clock1230;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private Button bt_start;
private TextView tv_show;
private int count = 10;
private MyHandler handler;

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

initView();
handler = new MyHandler();
bt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new MyThread()).start();
}
});
}

private void initView() {
bt_start = (Button) findViewById(R.id.bt_start);
tv_show = (TextView) findViewById(R.id.tv_show);
}

private class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
//接受消息处理UI
if (msg.what == 1) {
tv_show.setText(msg.obj + "");
}
}
}

private class MyThread extends Thread {
@Override
public void run() {
//发送消息
Looper.prepare();
while (count >= 0) {
Message message = new Message();
message.what = 1;
message.obj = count;
handler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
}
Looper.loop();
}
}
}


3、AsyncTask

package com.zdsoft.clock1230;

import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private Button bt_start;
private TextView tv_show;
private int count = 10;

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

initView();
bt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MyTask().execute();
}
});
}

private void initView() {
bt_start = (Button) findViewById(R.id.bt_start);
tv_show = (TextView) findViewById(R.id.tv_show);
}

private class MyTask extends AsyncTask {

@Override
protected Object doInBackground(Object[] params) {
while (count >= 0) {
publishProgress(count);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count--;
}
return "结束";
}

/**
* 执行过程中,更新UI
*
* @param values
*/
@Override
protected void onProgressUpdate(Object[] values) {
tv_show.setText(values[0].toString());
}

/**
* 执行结束后,更新UI
*
* @param o
*/
@Override
protected void onPostExecute(Object o) {
tv_show.setText(o.toString());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  消息 android