请协助,我有以下代码,我尝试在不同的地方执行,但结果如下: 1)当放置在on创建时,它会保持重置为60秒 2)当放入onResume时它似乎完美地工作,直到再次按下播放按钮然后它从最后的onPause位置开始倒计时 3)当放入playAgain方法时,它会崩溃
代码: createTimer方法
public void createTimer(){
countDownTimer = new CountDownTimer(timeRemaining, 1000) {
@Override
public void onTick(long l) {
if (!isFinnish) {
timeRemaining = l;
} else {
timeRemaining = 63200;
}
countDownText.setText(String.valueOf(l/1000-60));
if (l <= 61000) {
timerTextView.setText(String.valueOf(l/1000) + "s");
button0.setEnabled(true);
button1.setEnabled(true);
button2.setEnabled(true);
button3.setEnabled(true);
button0.setVisibility(View.VISIBLE);
button1.setVisibility(View.VISIBLE);
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
sumTextView.setVisibility(View.VISIBLE);
countDownText.setVisibility(View.INVISIBLE);
}
if (l/1000 == 30){
if (MainActivity.mplayer7 != null) {
MainActivity.mplayer7.release();
MainActivity.mplayer7 = null;
}
MainActivity.mplayer7 = MediaPlayer.create(getApplicationContext(), R.raw.halfway);
if (MainActivity.muted == false) {
MainActivity.mplayer7.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer7.start();
}
if (l/1000 == 5){
if (MainActivity.mplayer != null) {
MainActivity.mplayer.release();
MainActivity.mplayer = null;
}
MainActivity.mplayer = MediaPlayer.create(getApplicationContext(), R.raw.ticktock);
if (MainActivity.muted == false) {
MainActivity.mplayer.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer.start();
}
}
@Override
public void onFinish() {
timerTextView.setText("0s");
timeRemaining = 63200;
isFinnish = true;
//Log.i("Score", String.valueOf(score));
//Log.i("Number of Questions", String.valueOf(numberOfQuestions));
//Log.i("Percentage", String.valueOf(percentage));
//resultTextView.setText("You scored: " + Integer.toString(score) + "/" + Integer.toString(numberOfQuestions));
if (score > 0) {
percentage = score * 100 / numberOfQuestions;
}
else {
percentage = 0;
}
button0.setEnabled(false);
button1.setEnabled(false);
button2.setEnabled(false);
button3.setEnabled(false);
playAgainButton.setVisibility(View.VISIBLE);
returnToMenu.setVisibility(View.VISIBLE);
resultDisplayTextView.setVisibility(View.VISIBLE);
resultTextView.setText(" ");
if (percentage > 80) {
resultDisplayTextView.setText("Fantastic Score! " + Integer.toString(percentage) + "%");
if (MainActivity.mplayer3 != null) {
MainActivity.mplayer3.release();
MainActivity.mplayer3 = null;
}
MainActivity.mplayer3 = MediaPlayer.create(getApplicationContext(), R.raw.fireworks);
if (MainActivity.muted == false) {
MainActivity.mplayer3.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer3.start();
}
else if (percentage >= 60 && percentage < 80) {
resultDisplayTextView.setText("Great Score! " + Integer.toString(percentage) + "%");
}
else if (percentage >= 40 && percentage < 60) {
resultDisplayTextView.setText("Average Score! " + Integer.toString(percentage) + "%");
}
else if (percentage > 1 && percentage < 40) {
resultDisplayTextView.setText("Poor Score! " + Integer.toString(percentage) + "%");
if (MainActivity.mplayer4 != null) {
MainActivity.mplayer4.release();
MainActivity.mplayer4 = null;
}
MainActivity.mplayer4 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
if (MainActivity.muted == false) {
MainActivity.mplayer4.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer4.start();
}
else {
resultDisplayTextView.setText("You did not play?");
if (MainActivity.mplayer5 != null) {
MainActivity.mplayer5.release();
MainActivity.mplayer5 = null;
}
MainActivity.mplayer5 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
if (MainActivity.muted == false) {
MainActivity.mplayer5.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer5.start();
}
}
};
}
playAgain Method
public void playAgain (View view) {
score = 0;
isFinnish = false;
numberOfQuestions = 0;
timerTextView.setText("60s");
pointsTextView.setText("0/0");
resultTextView.setText("");
playAgainButton.setVisibility(View.INVISIBLE);
returnToMenu.setVisibility(View.INVISIBLE);
resultDisplayTextView.setVisibility(View.INVISIBLE);
countDownText.setVisibility(View.VISIBLE);
button0.setVisibility(View.INVISIBLE);
button1.setVisibility(View.INVISIBLE);
button2.setVisibility(View.INVISIBLE);
button3.setVisibility(View.INVISIBLE);
sumTextView.setVisibility(View.INVISIBLE);
if (MainActivity.mplayer3 != null) {
MainActivity.mplayer3.release();
MainActivity.mplayer3 = null;
}
if (MainActivity.mplayer4 != null) {
MainActivity.mplayer4.release();
MainActivity.mplayer4 = null;
}
if (MainActivity.mplayer6 != null) {
MainActivity.mplayer6.release();
MainActivity.mplayer6 = null;
}
MainActivity.mplayer6 = MediaPlayer.create(getApplicationContext(), R.raw.countdown);
if (MainActivity.muted == false) {
MainActivity.mplayer6.setVolume(0.0f, 0.0f);
}
MainActivity.mplayer6.start();
countDownTimer.start();
generateQuestion();
}
的onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
createTimer();
// THIS CODE IS TO ENABLE THE ICON IN THE TASKBAR ////////////////////
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
//////////////////////////////////////////////////////////////////////
// SET IT TO ONLY POTRAIT VIEW
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent intent = getIntent();
countDownText = (TextView) findViewById(R.id.countDownText);
playAgainButton = (Button) findViewById(R.id.playAgainButton);
returnToMenu = (Button) findViewById(R.id.returnToMenu);
sumTextView = (TextView) findViewById(R.id.sumTextView);
resultTextView = (TextView) findViewById(R.id.resultTextView);
resultDisplayTextView = (TextView) findViewById(R.id.resultDisplayTextView);
pointsTextView = (TextView) findViewById(R.id.pointsTextView);
timerTextView = (TextView) findViewById(R.id.timerTextView);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout1 = (LinearLayout) findViewById(R.id.linearLayout1);
button0 = (Button) findViewById(R.id.button0);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
MainActivity.mAdView = (AdView) findViewById(R.id.adView);
MainActivity.mplayer = MediaPlayer.create(getApplicationContext(), R.raw.ticktock);
MainActivity.mplayer1 = MediaPlayer.create(getApplicationContext(), R.raw.pop);
MainActivity.mplayer2 = MediaPlayer.create(getApplicationContext(), R.raw.wrong);
MainActivity.mplayer3 = MediaPlayer.create(getApplicationContext(), R.raw.fireworks);
MainActivity.mplayer4 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
MainActivity.mplayer5 = MediaPlayer.create(getApplicationContext(), R.raw.poor);
MainActivity.mplayer6 = MediaPlayer.create(getApplicationContext(), R.raw.countdown);
MainActivity.mplayer7 = MediaPlayer.create(getApplicationContext(), R.raw.halfway);
if (MainActivity.muted == false) {
MainActivity.mplayer.setVolume(0.0f, 0.0f);
MainActivity.mplayer1.setVolume(0.0f, 0.0f);
MainActivity.mplayer2.setVolume(0.0f, 0.0f);
MainActivity.mplayer3.setVolume(0.0f, 0.0f);
MainActivity.mplayer4.setVolume(0.0f, 0.0f);
MainActivity.mplayer5.setVolume(0.0f, 0.0f);
MainActivity.mplayer6.setVolume(0.0f, 0.0f);
MainActivity.mplayer7.setVolume(0.0f, 0.0f);
}
MainActivity.displayAds();
mHandler.postDelayed(new Runnable() {
public void run() {
playAgain(playAgainButton);
}
}, 1000);
}
onResume和onPause
@Override
public void onResume() {
super.onResume();
countDownTimer.start();
if (MainActivity.mAdView != null) {
MainActivity.mAdView.resume();
}
}
@Override
public void onPause() {
countDownTimer.cancel();
if (MainActivity.mAdView != null) {
MainActivity.mAdView.pause();
}
super.onPause();
}
我有全局变量设置并假设在倒计时器内的onFinnish中重置它应该重置它但不会重置它。
由于
答案 0 :(得分:0)
字段(您称之为Global vars)不保证在活动娱乐时恢复,并且可以随时进行GC。您应该在创建时创建var in,将它们存储在Bundle
onPouse
中,然后再从另一个Bundle
或onCreate
方法中的onResume
重新创建它们。
此处您有Google Dev的文档,介绍如何处理活动创建,娱乐和最终确定https://developer.android.com/training/basics/activity-lifecycle/recreating.html
基本上1)它重置为60秒,因为每次你回到你的活动时都会重新创建它(来自不同的应用程序或不同的活动)
2)idk哪里是你的“再玩”的东西,我不打算进入那个代码
3)countDownTimer.start();
可能在这里它与NPE崩溃我是对的吗? (我现在正在读我的水晶球)
阅读关于活动生命周期的完整Google教程,您不会遇到任何修复代码的麻烦。
https://developer.android.com/training/basics/activity-lifecycle/index.html