【发布时间】:2015-12-15 07:29:11
【问题描述】:
我正在尝试加载一些数据。 id 数据在 20 秒内加载,然后我开始新活动,否则我将通过提供一些相关消息来完成。我已经启动了一个 countdownTimer 来跟踪时间。加载数据后,我想停止计时器。我有以下课程:
public class SplashActivity extends AppCompatActivity {
private Context mContext;
private Boolean mDataLoadedFromServer = false;
private String mJSONData;
private SplashTimerForLoadingMasterDataForAllChannels mTimer;
private void stopTimer(){
mTimer.cancel();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_splash);
mTimer = new SplashTimerForLoadingMasterDataForAllChannels(20000,1000);
mTimer.start();
}
class SplashTimerForLoadingMasterDataForAllChannels extends CountDownTimer {
public SplashTimerForLoadingMasterDataForAllChannels(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
Log.d("testTimer", "SplashTimerForLoadingMasterDataForAllChannels");
//SomE AsyncTAsk
LoadData loaddata = new LoadData();
loaddata.execute();
//SomE AsyncTAsk
}
@Override
public void onTick(long millisUntilFinished) {
Log.d("testTimer", "onTick millisUntilFinished = " + millisUntilFinished + " mDataLoadedFromServer = " + mDataLoadedFromServer);
//mDataLoadedFromServer is modified once Data is loaded in AsyncTask
if(mDataLoadedFromServer) {
stopTimer();
}
}
@Override
public void onFinish() {
Log.d("testTimer", "onFinish");
if(mDataLoadedFromServer) {
mDataSavedAndNextActivityLaunched = true;
if (Utils.checkIfUserLoggedIn()) {
mContext.startActivity(new Intent(mContext, ABCACtivity.class));
} else {
mContext.startActivity(new Intent(mContext, XYZActivity.class));
}
finish();
}
}
}
}
我在本地方法调用中取消了它,但 onTick 仍然被调用。有人可以帮忙吗?
【问题讨论】:
-
我从来没有写过这样的代码,但是......我认为你可以用
onTick()方法编写所有动作。假设所有数据总是在 20 秒内加载。因此,如果Tick()返回 20 秒,请永久运行新的ABCActivity。先试试这个。 -
如果它工作正常,我想你还有一个方法来检查是否加载了数据。因此,在 onTick() 中的
if语句中编写一个语句,该语句不仅会检查数据是否在 20 秒内加载,而且还会检查当时是否真的加载了数据。否则(else语句)运行XYZActivity -
你的 onTick() 仍然被调用,因为你错过了删除回调。此外,我看不出
stopTimer()到底在做什么。你把你的代码部分放在那里,所以它看起来很不干净,很多人不知道如何帮助你。如果您不想放置整个代码。试试上面的方法。希望对您有所帮助 -
@piotrek1543 StopTimer 在开始时提到它是:private void stopTimer(){ mTimer.cancel();它只是取消计时器。还有什么回调以及如何清除它们?也对于第二条评论..我可以在 OnTick() 中检查相同的内容,但即使在 XYZActivity 启动后,onTick 也会不断被调用,我可以看到它的日志。如何阻止它?让我们说我的数据在 2 秒内加载,因此我需要停止比那里更晚。
-
StackOverflow 上存在一些问题,例如stackoverflow.com/questions/3138348/…。在其中一篇文章中,我读到 CountDownTimer 如果您在方法之外调用它,而不是在其中调用它,它的效果很好。
标签: java android android-layout android-fragments android-intent