The application may be doing too much work on its main thread.
这主要是由于主线程进行了联网、数据库查询、大文件读写等出现的问题。
可以同时进行的任务,可以用线程来表示,每个线程完成一个任务,并与其它线程同时执行,这种机制被称为多线程。
多线程的创建:
方法1、通过Thread类的方法创建线程
Tread thread=new Thread(new Runnable(){
//重写run()方法
@Override
public void run(){
}
});
方法2、通过实现Runnable接口创建线程
public class Anmoresult extends Activity implements Runnable{
@Override
public volid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anmoresult);
}
@Override
public void run(){
//要执行的程序
}
}
线程的开启
thread.start();
线程的休眠
thread.sleep(1000);//休眠1秒
线程的中断
………………//省略部分代码
thread.interrupt();
………………//省略部分代码
public void run(){
while(!Thread.currentThread().isInterrupted()){
………………
}
}
但是,如果线程在执行wait(),join(),sleep()时,中断会被清除,并抛出InterruptedException,所以,需要使用一个boolean型的标记变量来记录线程的中断状态,并通过该标记变量来控制循环的执行与停止。
private boolean isInterrupt=false;//定义标记变量
……………………
…………………………//在需要中断线程时,将isInterrupt的值设置为true
public void run(){
while(!isInterrupt){
}
}
范例1:通过实现Runnable接口来创建线程
public class MainActivity extends Activity implements Runnable{
private Thread thread;//声明线程对象
int i;
@Override
public volid onCreate(Bundle savedInstanceState){
……………………
Button startButton = (Button)findViewById(R.id.button1);
startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
i=0;
thread = new Thread(MainActivity.this); //创建一个线程
thread.start();//开启线程
}
}) ;
Button stoptButton = (Button)findViewById(R.id.button2);
stopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
if(thread!=null){
thread.interrupt();
thread=null;
}
Log.i("提示:","线程中断");
}
}) ;
@Override
public void run(){
while( !Thread.currentThread().isInterrupted()){
i++;
Log.i(“循环变量:",String.valueOf(i));
}
}
}
@Override
protected void onDestroy(){
if(thread!=null){
thread.interrupt();
thread=null;
}
super.onDestroy();
}
}