1、阻塞主UI
Button button = (Button) findViewById(R.id.button1);
TranslateAnimation animation = new TranslateAnimation(0, 150, 0, 150);
animation.setRepeatCount(30);
animation.setDuration(2000);
button.setAnimation(animation);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
andriod系统会对超过5S的程序发出是否结束的提示。
2、优化一:创建线程
Button button = (Button) findViewById(R.id.button1);
TranslateAnimation animation = new TranslateAnimation(0, 150, 0, 150);
animation.setRepeatCount(30);
animation.setDuration(2000);
button.setAnimation(animation);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
});
3、线程把执行结果回传给主UI (只有主线程才可以修改主UI的view,其他线程都不行)
4、方法一:post
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final int sum = 10;
v.post(new Runnable() {
@Override
public void run() {
TextView view = (TextView) v;
view.setText("" + sum);
}
});
}
}).start();
}
});
5、方法二:AsyncTask
调用
@Override
public void onClick(final View v) {
new DownloadImageTask().execute();
}
创建一个异步类
private class DownloadImageTask extends AsyncTask<String, Void, Integer>
{
@Override
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int sum = 11;
return sum;
}
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
button2.setText(""+result);
}
}
创建一个新的类继承AsyncTask;