我是Android编程的新手,所以我可能在这里错过了一些简单的东西。
目标是创建数字标牌应用的原型。现在我创造了三个活动; MainActivity
有一种方法可以在一段时间后切换到第二个活动。然后从第二个活动到第三个活动调用相同的方法,从第三个活动调用相同的方法调用main。
但是有两个问题:首先,每次应用程序在活动之间切换时是否可以创建新的Intent?正如我所提到的,我最近开始学习Android,所以如果这是一个非常愚蠢的问题,请不要生气。
第二:即使我在finish();
startActivity(intent);
,我在我的模拟器中按下主页按钮后,应用也会自动启动
以下是MainActivity
:
public void switchActivities(final Class<?> classObject) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(), classObject);
startActivity(intent);
finish();
}
}, 1000);
}
活动Second和Third扩展MainActivity并调用switchActivities方法:
switchActivities(Third.class);
(从第二到第三)。
提前致谢!
更新:
我将public boolean isRunning = true;
添加到了我的MainActivity和
if(isRunning) startActivity(intent);
到switchActivities方法;
我还添加了一个方法
@Override
protected void onPause(){
super.onPause();
isRunning = false;
}
这里建议。
虽然finish();
应该已经清除了方法堆栈,但是在按下Home按钮后应用程序没有关闭,而是转到上一个活动,所以我将此行添加到AndroidManifest文件中的每个活动:
android:noHistory="true"
建议here。
很抱歉没有提供有用的答案,我还没有足够的声誉。
答案 0 :(得分:1)
活动之间用于导航的Intent
,所以使用它很酷,没问题
第二个问题,因为在您点击“主页”按钮后Activity
对象仍在您的内存中,然后Handler
将继续其工作并在您在代码中确定的特定时间段后开始活动
答案 1 :(得分:1)
是的,这是通过创建新意图来切换活动的正确方法。我对你的第二个问题感到困惑。如果你说你正在使用postDelayed方法,它会在一段时间后被触发,即使你已经完成了你的活动或按下了主页按钮,你也可以通过在你的活动中创建一个布尔变量isRunning来处理这个问题,当onPause时它会变为false或onDestroy被调用。然后,在您的postdelayed方法中,您可以检查标志,然后根据需要继续。
答案 2 :(得分:0)
对于您的第一个问题:每次创建新Intent
都不是问题
第二个有点棘手。当您按下主页按钮时,当前活动将保留在内存中,因此即使您认为它未运行,它也可以启动新活动。处理此操作以检查活动的最简单方法是完成活动,如果是,则不显示下一个活动。
if (!isFinishing()) startActivity(intent);
此if语句会阻止您的活动在后台启动新活动。