簡體   English   中英

為什么在活動開始時調用 onResume()?

[英]Why is onResume() called when an activity starts?

我有一個應用程序,登錄后它會將您帶到歡迎屏幕。 我放了一個 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是您想要的。

請查看活動生命周期狀態圖。

這是方法被調用的順序:

  1. onCreate()
  2. onStart()
  3. onResume()
  4. ->活動正在運行

http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle

onCreate之后的onResume是正常的活動生命周期

即使在首次啟動時也會調用onStartonResume的原因是,它使編寫代碼更加容易。

你可以假設你回到之前onResume你會得到onPause叫,因為沒有辦法退出“恢復”狀態,而不onPause 該行為可用於初始化onResume並取消初始化它們,而無需進一步檢查onPause 如果您不確定在開始時是否調用過onResume ,則整個方案都會中斷。

旁注:不要使用任何onXYZ方法訪問數據庫,因為這會阻塞UI線程,而應該繪制UI並處理觸摸事件。

只是為此添加一種方法。 聲明一個變量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"
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM