2014-06-08 34 views
-2

這裏是我的代碼:當我按 '家' 按鈕,我的應用程序就會被殺死

public class Play extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(new MainSurfaceView(this)); 
} 

@Override 
protected void onPause() { 
super.onPause(); 

} 

public class MainSurfaceView extends SurfaceView implements 
SurfaceHolder.Callback { 

private SurfaceHolder mSurfaceHolder; 
private DrawingThread mThread; 

private Bitmap background; 

public MainSurfaceView(Context context) { 
super(context); 

mSurfaceHolder = getHolder(); 
mSurfaceHolder.addCallback(this); 
mThread = new DrawingThread(); 

background = BitmapFactory.decodeResource(getResources(), 
R.drawable.background); 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
int height) { 

} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
mThread.keepRunning = true; 
mThread.start(); 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
mThread.keepRunning = false; 
boolean retry = true; 
while (retry) { 
try { 
mThread.join(); 
retry = false; 
} catch (InterruptedException e) { 
} 
} 
} 

private class DrawingThread extends Thread { 
boolean keepRunning = true; 

@Override 
public void run() { 
Canvas c; 
while (keepRunning) { 
c = null; 

try { 
c = mSurfaceHolder.lockCanvas(); 
synchronized (mSurfaceHolder) { 
c.drawBitmap(background, 0, 0, null); 
} 
} finally { 
if (c != null) 
mSurfaceHolder.unlockCanvasAndPost(c); 
} 

try { 
Thread.sleep(1); 
} catch (InterruptedException e) { 
} 
} 
} 
} 

} 
} 

錯誤日誌:

06-08 02:42:54.992: W/dalvikvm(10721): threadid=12: thread exiting with uncaught exception (group=0x4154bba8) 
    06-08 02:42:54.992: E/AndroidRuntime(10721): FATAL EXCEPTION: Thread-478 
    06-08 02:42:54.992: E/AndroidRuntime(10721): Process: com.yong.space, PID: 10721 
    06-08 02:42:54.992: E/AndroidRuntime(10721): java.lang.NullPointerException 
    06-08 02:42:54.992: E/AndroidRuntime(10721): at com.yong.space.Play$MainSurfaceView$DrawingThread.run(Play.java:81) 

回答

0

我的選擇將是lockCanvas失敗你的時候不要不擁有屏幕,並返回null。你應該輸入一個空檢查,並且可能殺死線程或在你進行onPause調用時暫停它,否則你會忙着循環和燒寫循環,試圖繪製但失敗。

相關問題