当第二次调用该活动时,进度条加载不会停止。
当第二次调用该活动时,进度条加载不会停止。
我创建了一个欢迎页面(启动器),并加入了一个进度条。在加载进度条后,下一个活动将会显示出来(几秒钟)。当应用程序第一次运行时,几秒钟后下一个活动将会显示出来。现在,当我按下返回按钮时,欢迎页面又重新显示出来。但这一次,几秒钟后,它又会像第一次那样调用下一个活动(使用Intent)。如何解决这个问题?
代码如下:
import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ProgressBar; public class WelcomeActivity extends AppCompatActivity { ProgressBar p; private boolean mbActive; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); p = (ProgressBar) findViewById(R.id.progressBar); final Thread timerThread = new Thread() { @Override public void run() { mbActive = true; try { int waited = 0; while(mbActive && (waited < 1000)) { sleep(200); if(mbActive) { waited += 200; updateProgress(waited); } } } catch(InterruptedException e) { } finally { onContinue(); } } }; timerThread.start(); } @Override public void onDestroy() { super.onDestroy(); } public void updateProgress(final int timePassed) { if(null != p) { final int progress = p.getMax() * timePassed / 100; p.setProgress(progress); } } public void onContinue() { Intent intd=new Intent(this,MainActivity.class); startActivity(intd); } }
问题的出现原因是在代码中,进度条的加载没有在第二次调用活动时停止。解决方法是在onResume()方法中调用showProgress()方法,来确保在每次活动重新调用时都会显示进度条。以下是修改后的代码:
public class WelcomeActivity extends AppCompatActivity { ProgressBar p; private boolean mbActive; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); } public void updateProgress(final int timePassed) { if (null != p) { final int progress = p.getMax() * timePassed / 100; p.setProgress(progress); } } public void onContinue() { Intent intd = new Intent(this, MainActivity.class); startActivity(intd); } protected void onResume() { super.onResume(); showProgress(); } private void showProgress() { p = (ProgressBar) findViewById(R.id.progressBar); final Thread timerThread = new Thread() { public void run() { mbActive = true; try { int waited = 0; while (mbActive && (waited < 1000)) { sleep(200); if (mbActive) { waited += 200; updateProgress(waited); } } } catch (InterruptedException e) { } finally { onContinue(); } } }; timerThread.start(); } public void onDestroy() { super.onDestroy(); } }
将进度条加载的代码放在onResume()方法中可以确保在每次活动重新调用时都会显示进度条。这样,无论活动被调用多少次,进度条加载都会停止。