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"/>
感謝您的幫助,並抽出時間來閱讀這個。
讓我知道是否需要任何額外的代碼來提供幫助。
在onPause中調用finish()是一個選項,但您也可以在AndroidManifest.xml的Activity標籤中添加android:noHistory =「true」。 – Rafal
除非你修改'onBackPressed()'的默認行爲,否則從'onPause()'調用'finish()'是不必要的。當InGameActivity完成時,你是否終止你的30fps線程? – adelphus
adelphus是的問題是在終止線程的方法中存在一個錯誤。感謝您的答覆。我也刪除完成(),因爲它是不必要的,現在一切正常。 –