2016-05-15 138 views
0

我的應用程序目前有兩個活動,一個啓動屏幕和一個遊戲活動。啓動屏幕只是一個背景和一個Play按鈕。按播放按鈕啓動InGameActivity,它可以正常工作,沒有問題。但是,當我在遊戲中按下back按鈕時,它會返回到上一個屏幕(背景和Play按鈕可見),但該應用程序不響應。幾秒鐘後,彈出一條錯誤消息,要求等待它響應或終止。後退按鈕導致應用程序停止響應

在遊戲中,我使用一個線程來保持一致的30 FPS,並控制繪製調用。我最好的選擇是在AndroidManifest.xml的線程中導致問題或缺失,但我很困惑。我在互聯網上找到的所有信息都表明後退按鈕很少引起問題,並且要求finish()onPause()onBackPressed()應該照顧它,但它沒有。

解決方案:調用onBackPressed()時終止線程解決了問題。

MainActivity

public class MainActivity extends Activity { 

    ImageButton play; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(R.layout.title); 

     play = (ImageButton)findViewById(R.id.title_screen_play_button); 
     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       System.out.println("Play button pressed!"); 
       Intent intent = new Intent(getApplicationContext(), InGameActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

而且在遊戲活動:

public class InGameActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     System.out.println("In game activity created"); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     //The GamePanel controls the entire game. It extends SurfaceView and implements SurfaceHolder.Callback 
     GamePanel gamePanel = new GamePanel(this, metrics.widthPixels, metrics.heightPixels, getResources()); 
     setContentView(gamePanel); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     System.out.println("Pausing game activity"); 

     finish(); 
    } 

} 

而且活動在我AndroidManifest.xml

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".InGameActivity"/> 

感謝您的幫助,並抽出時間來閱讀這個。

讓我知道是否需要任何額外的代碼來提供幫助。

+0

在onPause中調用finish()是一個選項,但您也可以在AndroidManifest.xml的Activity標籤中添加android:noHistory =「true」。 – Rafal

+0

除非你修改'onBackPressed()'的默認行爲,否則從'onPause()'調用'finish()'是不必要的。當InGameActivity完成時,你是否終止你的30fps線程? – adelphus

+0

adelphus是的問題是在終止線程的方法中存在一個錯誤。感謝您的答覆。我也刪除完成(),因爲它是不必要的,現在一切正常。 –

回答

0

當onBackPressed()被調用時終止線程解決了問題。