在android开发中,Activity里面的子线程在Activity onDestroy()后并没有销毁,而是一直在运行。解决办法有两种,一种通过service开启线程,并控制线程周期。第二种是本文要讲的:通过控制变量控制线程的运行。
具体是定义一个boolean全局变量threadRun,由这个变量控制线程中的//do something 循环,想执行线程功能时将threadRun=true即可,不想执行线程功能时将threadRun=flase即可,但此时线程还是在运行的,只是一直在空循环中。
public void run(){
while(true){
while(threadRun){
//do something
threadRun=flase;
}
}
}
在Activity的onPause()中将threadRun=flase,相应的在onResume()中将threadRun=true;
还要注意一点,因为onDestroy()后线程并没有销毁,再次进入此Activity先执行的是onCreate(),所以在onCreate()中应该这样生成线程。
if(myThread==null){
myThread=new MyThread();
myThread.start();
}
这样就可以防止Activity finish之后重新启动该Activity线程重复开启。
之前由于没有注意到这个,结束Activity后又开启Activity,线程重复开启,导致ListView中出现重复项。