我有一个应用程序,登录后它会在欢迎屏幕上引发你。我放了一个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();
我很困惑。请提供一些经验
答案 0 :(得分:20)
嗯,我不太清楚你想要问什么,或者问题是什么。但我会建议你阅读“Android Activity LifeCycle”,这将清除你在android中的许多疑惑,因为它与其他语言或平台不同。
注意:每次活动“可见”时都会调用OnResume,因此,当您的活动变得可见时,会多次调用您的方法。如果您只是想第一次调用该方法,那么OnCreate就是您所寻找的。 p>
答案 1 :(得分:6)
请查看活动生命周期状态图表。
这是调用方法的顺序:
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle
答案 2 :(得分:2)
onResume
之后 onCreate
是正常Activity Lifecycle
即使在第一次启动时调用onStart
和onResume
的原因是它使编写代码更容易。
您可以假设在返回onResume
之前,您将被onPause
调用,因为没有onPause
就无法退出“已恢复”状态。该行为可用于初始化onResume
中的内容并取消初始化,而无需进一步检查onPause
。如果您无法确定在整个方案开始时调用了onResume
。
旁注:不要从任何onXYZ
方法访问您的数据库,因为这会阻止UI线程,而不应该绘制UI并处理触摸事件。