如何在onCreate和onStart之间编写代码?

时间:2014-11-26 02:59:15

标签: java android android-activity android-lifecycle

我曾多次在onCreate()上编写代码时出现问题。主要是因为UI尚未在屏幕上进行调整和布局(即使我将代码放在函数的末尾)。我已查看activity life-cycle以查看是否有onCreate()之后的任何内容。有onStart(),但问题是onRestart() recalls onStart(),我不想要那样。那么is there a way to write code between onCreate() and onStart()?或者我应该在哪里编写在放置UI之后运行的代码,并且只在其process期间运行一次?

1 个答案:

答案 0 :(得分:1)

不确定你到底需要什么,但你可以"作弊"并简单地存储您是否运行代码:

private boolean mInit = false;
void onStart() {
    if (!mInit) {
       mInit = true;
       // do one time init
    }
    // remaining regular onStart code
}

放置UI时运行代码的另一种方法是使用全局布局侦听器:

public class FooActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_content);
        View content = findViewById(android.R.id.content);
        content.getViewTreeObserver().addOnGlobalLayoutListener(this);
    }

    @Override
    public void onGlobalLayout() {
        // unregister directly, just interested once.
        View content = findViewById(android.R.id.content);
        content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        // do things here.
    }
}