2012-05-05 29 views
0

嗨,
在我的应用程序即时尝试使用Thread.sleep(100)来暂停我的线程,而其后台为了使用较少的CPU,但它冻结时我打开它。
我意识到onResume在我重新打开应用程序时未被调用。使用Thread.sleep()暂停和恢复应用程序

任何想法为什么?

public void onPause() { 
     pause = true; 
     Log.d("mSTATE","THREADPAUSE"); 
    } 

public void onResume() { 
    pause = false; 
     running = true; 
     Log.d("mSTATE","THREADRESUME"); 
    } 
public void run() { 

    while(running){ 
     while(pause && running){ 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
     } 

     while (!pause && running) { 
      Canvas c = null; 
      try { 
       c = sHolder.lockCanvas(null); 
       synchronized (sHolder) { 
        doDraw(c); 
        powerUps(); 
       } 
      } finally { 
       if (c != null) { 
        sHolder.unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 
     Log.d("mState","EndofRun");    
}  

回答

2

当你让你的线程进入睡眠状态时,你也会阻塞UI线程,从而导致应用程序冻结。

您需要以Android方式检查线程以获得最佳性能。

http://developer.android.com/resources/articles/painless-threading.html

+0

运行处于surfaceview线程,这样不应该是被罚款? – MikeT

+0

表面视图线程是一个UI线程。如果你用另一个线程中断它,你只需冻结UI。 –

+0

你会如何推荐我实施暂停和恢复? – MikeT