在活动对用户可见后执行方法

时间:2013-10-11 07:02:51

标签: android android-activity

我的活动包含太多的UI控件。我想在使活动可见后执行一个方法。

我试过的一个例子:

public class Main extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
             MyMethod();
    }

    private void MyMethod(){
        Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
    }
}

但是在上面的示例中,消息显示在活动可见之前。

如果活动完全可见,有没有办法找出?

5 个答案:

答案 0 :(得分:26)

将代码移至onResume

@Override
protected void onResume()
{
    super.onResume();
    MyMethod();
}

检查活动生命周期

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

protected void onResume ()

在onRestoreInstanceState(Bundle),onRestart()或onPause()之后调用,以使您的活动开始与用户交互。这是开始制作动画,打开独家访问设备(如相机)等的好地方。

请记住,onResume不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)可以确定您的活动对用户可见(例如,恢复游戏)。

派生类必须调用超类的此方法的实现。如果他们不这样做,将抛出异常。

答案 1 :(得分:6)

将代码移至onResume

系统会在您的活动进入前台时调用此方法,包括第一次创建活动时。 阅读Pausing and Resuming an Activity的详细信息

@Override
protected void onResume() {
    super.onResume();

    MyMethod();
}

Android activity life cycle - what are all these methods for?

了解详情

答案 2 :(得分:4)

将代码移至onAttachedToWindow()

@Override
public void onAttachedToWindow() {
   super.onAttachedToWindow();
   Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
}

答案 3 :(得分:3)

没有真正的回调,正好在那个时候,Activity是可见的。但是正如您在附图中看到的那样,只有当Activity应该可见时才调用方法onResume()

另请参阅活动生命周期和文档HERE

所以你的方法应该像这样调用:

@Override
public void onResume() {
    super.onResume();
     MyMethod();
}

Diagram Android

答案 4 :(得分:2)

在活动MyMethod()中致电onResume()

根据文档onResume()在活动开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到活动堆栈。

protected void onResume() {
   super.onResume();
   MyMethod();
}