Execute a method after an activity is visible to u

2020-05-19 00:09发布

问题:

I have an activity contains too many UI controls. I want to execute a method after make the activity visible.

An example i tried:

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();
    }
}

But in the above sample, the message shows before the activity is visible.

Is there a way to find out, if the activity is fully visible ?

回答1:

Move your code to onResume

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

Check the activity lifecycle

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

protected void onResume ()

Called after onRestoreInstanceState(Bundle), onRestart(), or onPause(), for your activity to start interacting with the user. This is a good place to begin animations, open exclusive-access devices (such as the camera), etc.

Keep in mind that onResume is not the best indicator that your activity is visible to the user; a system window such as the keyguard may be in front. Use onWindowFocusChanged(boolean) to know for certain that your activity is visible to the user (for example, to resume a game).

Derived classes must call through to the super class's implementation of this method. If they do not, an exception will be thrown.



回答2:

Move the code on to onResume.

System calls this method every time your activity comes into the foreground, including when it's created for the first time. Read details for Pausing and Resuming an Activity

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

    MyMethod();
}

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



回答3:

Move the code on to onAttachedToWindow()

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


回答4:

there is no real callback, which is called, exactly at that time the Activity is Visible. But as you can see in the attached picture, the method onResume() is just called when Activity should be visible.

Also have a look at the Activity lifecycle and the documentation HERE

So your method should be called like this:

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



回答5:

Call MyMethod() in onResume() of Activity

As per documentation onResume() is called when the activity will start interacting with the user. At this point your activity is at the top of the activity stack, with user input going to it.

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