Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnPause is called right after OnResume

EDIT* This issue is occurring while testing on a android device. This issue does not appear while testing on a emultor.


I am starting a new activity and I see onPause is called right after onResume is called. If I look at log it goes to Idle after onResume. Therefore causing onPause right after onResume is called.

Caller activity - calling MainActivity on onClick via intent.

public class TestActivity extends AppCompatActivity implements View.OnClickListener{

    String TAG = "acr";
    Button testBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        testBtn = (Button) findViewById(R.id.testBtn);
        testBtn.setOnClickListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "on pause called on TestActivity ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "on resume called on  TestActivity ");
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.testBtn:
                Intent mainIntent = new Intent(this, MainActivity.class);
                TestActivity.this.startActivity(mainIntent);
                break;
        }
    }
}

Activity that has bug

public class MainActivity extends AppCompatActivity{

    public static final String TAG = "acrx";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "on pause called on mainactivity");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "on resume Called on Main activity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "on stop Called on Main activity");
    }
}

Log

12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on resume Called on Main activity
12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader D/SecWifiDisplayUtil: Metadata value : SecSettings2
12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{5ce8491 I.E...... R.....ID 0,0-0,0}
12-06 23:24:19.781 22983-23012/com.example.m1alesis.smartcardreader D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000,  [1440x2560]-format:1
12-06 23:24:19.811 22983-22983/com.example.m1alesis.smartcardreader W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
12-06 23:24:19.831 22983-22983/com.example.m1alesis.smartcardreader D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
12-06 23:24:19.871 22983-23012/com.example.m1alesis.smartcardreader D/OpenGLRenderer: endAllActiveAnimators on 0x7f9c17ec00 (RippleDrawable) with handle 0x7f9ccc8b60
12-06 23:24:19.871 22983-22983/com.example.m1alesis.smartcardreader I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@fa2f707 time:376798424
12-06 23:24:20.131 22983-22983/com.example.m1alesis.smartcardreader V/ActivityThread: updateVisibility : ActivityRecord{e78cff6 token=android.os.BinderProxy@a67fd36 {com.example.m1alesis.smartcardreader/com.example.m1alesis.smartcardreader.TestActivity}} show : false
12-06 23:24:31.561 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on pause called on mainactivity
12-06 23:24:31.701 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on resume Called on Main activity
12-06 23:24:31.721 22983-22983/com.example.m1alesis.smartcardreader I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@fa2f707 time:376810271
like image 263
m1alesis Avatar asked Oct 17 '22 21:10

m1alesis


2 Answers

I had the same issue and for me it is related to the activity starting up and the screen not being on - I only saw it after I had the screen off (e.g. after touching the power button and then home to resume again).

This is a behaviour that others have seen also - I found this question and answer has useful references: OnPause and OnStop() called immediately after starting activity

The key quote that helped me understand the behaviour was:

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

like image 166
Mick Avatar answered Oct 21 '22 06:10

Mick


In my case the same issue was caused by ActivityCompat.requestPermissions(this, new String[]{Manifest.permission...);.

 * This method may start an activity allowing the user to choose which permissions
 * to grant and which to reject. Hence, you should be prepared that your activity
 * may be paused and resumed. Further, granting some permissions may require
 * a restart of you application. In such a case, the system will recreate the
 * activity stack before delivering the result to your
 * {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}.

This slowed down the app start noticeably.

like image 30
einUsername Avatar answered Oct 21 '22 08:10

einUsername