【发布时间】:2013-01-30 07:23:54
【问题描述】:
我正在制作一个带有闪屏动画的应用。我给了用户取消动画的选项。
主屏幕 (Home) 有一个 TextView (tv) 。我在 onCreate() 期间设置了文本,并在 onResume() 期间再次设置。
与动画一起运行时,流程为:splashscreen -> home screen -> other Activity。 tv 的文本已设置,然后返回主屏幕“重新加载”并设置不同的文本。
动画取消时,从主屏幕开始:主屏幕->其他活动。
问题:当动画被取消时,主屏幕在 onCreate() 期间将文本设置在 tv2 中,然后在 onResume() 中再次设置,即使我添加了一个“if”子句来防止这种情况发生.
代码来了:
public class Home extends Activity {
public static boolean reload = true;
EditText tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv= (EditText) findViewById(R.id.textViewFact);
tv.setText(updateText());
MORE STUFF ....
}
如果用户选择取消动画,则从不同的 Activity 将“重新加载”设置为 false。
现在是 onResume:
public void onResume(){
super.onResume();
Log.i("test", "home activity before if: " + Home.reload);
if(!reload){
Log.i("test", "home activity inside if: " + Home.reload);
return;
}
else{
Log.i("test", "home activity inside else: " + Home.reload);
tv.setText(updateText());
}
}
如您所见,updateText() 在 onCreate() 和 onResume() 中运行,但如果 reload 为假(如您在以下 logcat 输出中看到的那样),它不应该运行updateText() 再次。
01-30 08:44:50.140: I/test(551): home activity before if: false
01-30 08:44:50.140: I/test(551): home activity inside if: false
01-30 08:44:51.170: I/test(551): home activity before if: false
01-30 08:44:51.170: I/test(551): home activity inside if: false
我不知道为什么它会进入 onResume() TWICE(它是,通过日志输出),以及它是如何运行 updateText() 函数的,当它只在 ELSE 子句中时,根据日志输出,没有达到。
【问题讨论】:
-
我认为您应该需要经历活动的生命周期,然后您才能自己理解为什么会发生。
-
如果你有一个显示在 Activity 之上的对话框,onResume 将在它恢复焦点后被调用
-
您了解活动生命周期吗? onResume() 将总是 被调用,它不是 一个关于 onCreate() 的 非此即彼。另外,无论如何,区分有什么好处?
-
我知道这一点 - 我希望 onResume() 工作 - 请更仔细地阅读我的问题。也许我不够清楚。 onResume 有 2 个选项:更新文本(如果 'reload' 为 true)或不更新文本('reload' false'),虽然 'reload' 为 false,但它无论如何都会更新。
-
我真的不明白它为什么重要,但您正在记录
Home.reload并使用reload。一般来说这是危险的(但我认为它不会在这里造成任何问题..)
标签: android onresume activity-lifecycle