IntentService
1、在manifest.xml中声明
</activity>
<service android:name=".MyService"></service>
<service android:name=".MyIntentService"></service>
</application>
2、MyIntentService类
public class MyIntentService extends IntentService {
public MyIntentService(String name) {
super(name);
}
public MyIntentService() {
this("");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("","服务关闭");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("","运行到IntentService");
int count = 0;
while (true){
if(count>=100){
count=0;
}
count++;
Intent intent1 = new Intent();
intent1.setAction(MainActivity.DOWN_LOAD_ACTION);
intent1.putExtra("count", count);
sendBroadcast(intent1);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
3、activity中
//注册receiver
receiver = new MyDownloadReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(DOWN_LOAD_ACTION);
registerReceiver(receiver,filter);
//点击事件
case R.id.button_stop:
Intent intent1 = new Intent(getApplicationContext(),MyIntentService.class);
stopService(intent1);
break;
case R.id.button_download:
Intent intent = new Intent(getApplicationContext(),MyIntentService.class);
startService(intent);
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
class MyDownloadReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int count = intent.getIntExtra("count",0);
mProgressbar.setProgress(count);
}
}
AsyncTask
public class MainActivity extends Activity {
private Button mButton;
private ProgressBar mProgressbar;
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button);
mProgressbar = (ProgressBar) findViewById(R.id.progressBar);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyTask task = new MyTask();
task.execute("开始执行吧");
}
});
}
class MyTask extends AsyncTask<String, String, String> {
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
int count = Integer.parseInt(values[0]);
mProgressbar.setProgress(count);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
mButton.setText(s);
}
@Override
protected String doInBackground(String... params) {
while (count < 101) {
count++;
publishProgress("" + count);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "已经全部完成";
}
}
}
Thread
1、倒计时
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TIME_DESC:
String time = (String) msg.obj;
mButton.setText(time);
break;
case TIME_DESC:
count--;
mButton.setText(count+"秒");
if(count>0) { try {
Thread.sleep(1000);
} catch (InterruptedException e) { e.printStackTrace();
}
handler.sendEmptyMessage(TIME_DESC);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = new Message();
mButton = (Button) findViewById(R.id.button_desc);
mButton2 = (Button) findViewById(R.id.button_send);
mButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);
}
});
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count = 60;
handler.sendEmptyMessage(TIME_DESC);
new Thread(new Runnable() {
@Override
public void run() {
while (count>0){
count--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
msg.obj = count+"秒";
msg.what= TIME_DESC;
handler.sendMessage(msg);
}
}
}).start();
}
});
}
2、用handler封装, looper.prepare
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
message = new Message();
mButton = (Button) findViewById(R.id.button_desc);
mButton2 = (Button) findViewById(R.id.button_send);
mButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(0);
}
});
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count = 60;
MyThread thread = new MyThread();
thread.start();
}
});
}
private Handler handler;
class MyThread extends Thread {
@Override
public void run() {
Looper.prepare();
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.d("hand","接收到主线程发送过来的消息");
}
};
Looper.loop();
}
}
}