8

我有一个应用程序,登录后它会将您带到欢迎屏幕。我放了一个 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();

我很困惑。请在这里提供一些经验

4

4 回答 4

21

好吧,我不太了解您要问什么或这里的问题是什么。但我会建议你阅读“ Android Activity LifeCycle ”,这将消除你的许多疑虑,因为 android 与其他语言或平台不同。

在此处输入图像描述

注意:每次活动“可见”时都会调用 OnResume,因此只要活动变得可见,就会调用相同次数的方法。如果您只想第一次调用该方法,那么 OnCreate 就是您要寻找的。

于 2012-08-30T19:08:00.530 回答
7

请看一下活动生命周期状态图。

这是调用方法的顺序:

  1. onCreate()
  2. 开始()
  3. onResume()
  4. -> 活动正在运行

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

于 2012-08-30T19:10:19.297 回答
2

onResumeafteronCreate是正常的Activity Lifecycle

您甚至在第一次启动时就获得onStartonResume调用的原因是它使编写代码更容易。

你可以假设在你返回之前onResume你会被onPause调用,因为没有onPause. 该行为可用于初始化onResume和取消初始化它们,而无需进一步检查onPause. 如果您不能确定onResume一开始就调用了它,那么整个方案就会中断。

附注:不要从任何onXYZ方法访问您的数据库,因为这会阻塞 UI 线程,而该线程应该绘制 UI 并处理触摸事件。

于 2012-08-30T19:20:08.003 回答
0

只是为此添加一个方法。声明一个变量int intResume = 0;l 然后实现下面的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"
        }
    }
于 2021-11-28T13:37:23.713 回答