我有一个应用程序,登录后会将您带到欢迎屏幕。我放了一个 Toast 来查看 onResume 何时触发,但它也会在 onCreate 之后触发
protected void onResume(){
super.onResume();
Database openHelper = new Database(this);//create new Database to take advantage of the SQLiteOpenHelper class
myDB2 = openHelper.getReadableDatabase(); // or getWritableDatabase();
myDB2=SQLiteDatabase.openDatabase("data/data/com.example.login2/databases/aeglea", null, SQLiteDatabase.OPEN_READONLY);//set myDB to aeglea
cur = fetchOption("SELECT * FROM user_login");//use above to execute SQL query
msg.setText("Username: "+cur.getString(cur.getColumnIndex("username"))
+"\nFull name: "+cur.getString(cur.getColumnIndex("name"))+" "+cur.getString(cur.getColumnIndex("last"))
+"\ne-mail: "+cur.getString(cur.getColumnIndex("email"))
+"\nAeglea id:"+cur.getString(cur.getColumnIndex("uid")));
Toast.makeText(getApplicationContext(), "RESUMED", Toast.LENGTH_SHORT).show();
}
来自:
//create new intent
Intent log = new Intent(getApplicationContext(), Welcome.class);
// Close all views before launching logged
log.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(log);
// Close Login Screen
finish();
我很困惑。请在此提供一些经验
好吧,我不太明白你想问什么或这里的问题是什么,但我建议你阅读Android Activity LifeCycle,这将消除你的许多疑虑,因为 Android 中的情况是不一样的与其他语言或平台一样。
注意: 每次活动“可见”时都会调用 OnResume,因此您的活动变得可见的次数与您的方法被调用的次数相同。如果您只想第一次调用该方法,那么
OnCreate
就是您所寻找的。
请查看 Activity 生命周期状态图。
这是调用方法的顺序:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle
onResume
onCreate
之后是正常的活动生命周期
即使在第一次启动时也会调用
onStart
和 onResume
的原因是它使编写代码变得更容易。
您可以假设在返回
onResume
之前,您将被调用 onPause
,因为没有 onPause
就无法退出“已恢复”状态。该行为可用于初始化 onResume
中的事物并取消初始化它们,而无需进一步检查 onPause
。如果您不能确定 onResume
在开始时被调用,那么整个方案就会失败。
旁注:不要从任何
onXYZ
方法访问数据库,因为这会阻塞 UI 线程,而 UI 线程应该绘制 UI 并处理触摸事件。
只是为此添加一种方法。声明一个变量l
int intResume = 0;
然后实现以下onResume:
@Override
public void onResume()
{
super.onResume();
intResume++;
// here put codes for after onCreate & "true resume"
if (intResume>1) {
intResume = 10;
// here put codes for "true resume"
}
}