2016-12-06 183 views
3

編輯*在Android設備上測試時發生此問題。在emultor上測試時不會出現此問題。OnResume OnResume後立即調用


我開始一個新的活動,我看到的onPause叫的onResume被稱爲之後。如果我查看日誌,它會在onResume之後進入空閒狀態。因此在調用onResume之後立即導致onPause。

調用者活動 - 通過intent在onClick上調用MainActivity。

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

的活動,有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"); 
    } 
} 

登錄

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: [email protected] time:376798424 
12-06 23:24:20.131 22983-22983/com.example.m1alesis.smartcardreader V/ActivityThread: updateVisibility : ActivityRecord{e78cff6 [email protected] {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: [email protected] time:376810271 
+0

它確實違背了android活動週期..它可能是它的一個bug。您的應用啓動後是否打開過任何應用? – ZeroOne

+0

我知道如果需要將結果傳遞給活動,但它已經恢復,可能會發生這種暫時性暫停。這不是這種情況,但也可能在其他情況下發生這種暫停。 –

+0

@MuhammadHafiqIqmal我還沒有打開任何其他應用程序。它立即發生。在onResume被調用後1秒內。 – m1alesis

回答

0

我想在我的測試活動,我沒有得到你的問題。我的MainActivity和TestActivity上只有一個按鈕。

我在這裏找到了一些東西:Pausing and Resuming an Activity

這是最有趣的部分:

注:當系統調用您的活動的的onPause()方法,該系統可以信令的活動將被暫停片刻,則用戶可以返回焦點你的活動,或者應用程序在多窗口模式下運行。但是,此方法調用也可能是用戶離開活動的第一個指示。

+0

多數民衆贊成在奇怪的是,我創建了新項目來測試它,但仍然是同樣的問題。測試我的兩個三星手機都具有相同的bug。你認爲這是因爲電話而不是代碼? – m1alesis

+0

我有一個三星Galaxy Tab E-Lite平板電腦。我在調試和正常模式下嘗試過。所以我不知道。 –

+0

@ m1alesis,你有沒有找到任何解決方案?我想了很多。如果您向我發送您的測試項目,我會在平板電腦上試用。 –

0

我有同樣的問題,對我來說,它與啓動的活動和屏幕沒有關聯 - 我只有在關閉屏幕後纔看到它(例如,在觸摸電源按鈕,然後回到家再次恢復)。

這是別人所看到的也是一個行爲 - 我發現這個問題,答案有有用的參考資料:OnPause and OnStop() called immediately after starting activity

關鍵的報價,幫助我理解的行爲是:

請記住, onResume不是您的活動對用戶可見的最佳指標;系統窗口(如鍵盤)可能在前面。使用onWindowFocusChanged(boolean)可以確定你的活動對用戶是可見的