2013-12-12 50 views
0

根據一個answerCommonsWare爲什麼在應用程序運行時調用onResume()?

onResume()被稱爲任何時間的活動正在恢復前景 輸入。這包括:

  • 當它返回到屏幕後,別的東西有 前景(例如,設置),以及

  • 當它首次在這一過程中被創建(其中 包括所需的任何新的過程,因爲你殺了從 DDMS舊)

因此,您的代碼將檢查無論是振鈴模式的狀態的情況下,將在任何情況下使用正確的圖像。

但在我的情況下,onResume()被調用,而應用程序正在運行沒有任何上述條件。 onResume()有一個refresh()方法,它顯示一個ProgressBar,加載WebView中的一些內容,然後隱藏ProgressBar並顯示WebView

請注意,它並不總是發生,但大部分時間都是這樣。

我真的很好奇,知道爲什麼發生這種情況,如果可能的話,我怎麼能阻止它,因爲它真的讓用戶看到它發生令人討厭的事情。

代碼:

public void refresh() 
{ 
     webView.clearCache(true); 
     layout.setVisibility(View.GONE); 
     progress.setVisibility(View.VISIBLE); 
     fetcher = new DataFetcher(); 

     String url = "http...." // some url 
     fetcher.execute(url); 
} 

public void onResume() 
{ 
     super.onResume(); 
     refresh(); 
} 

編輯 這是我Thread.dumpStack()後得到了(這表明兩次在logcat中,所以onResume()被調用兩次):

12-12 10:36:22.033: W/HardwareRenderer(22358): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:36:24.947: W/HardwareRenderer(22358): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:36:26.744: W/HardwareRenderer(22358): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:36:27.064: W/System.err(22358): java.lang.Throwable: stack dump 
12-12 10:36:27.088: W/System.err(22358): at java.lang.Thread.dumpStack(Thread.java:496) 
12-12 10:36:27.088: W/System.err(22358): at com.example.app.menufragments.SalesByPointsFragment.onResume(SampleFragment.java:101) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.Fragment.performResume(Fragment.java:1543) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:963) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1894) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:466) 
12-12 10:36:27.088: W/System.err(22358): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:455) 
12-12 10:36:27.088: W/System.err(22358): at com.actionbarsherlock.app.SherlockFragmentActivity.onPostResume(SherlockFragmentActivity.java:68) 
12-12 10:36:27.088: W/System.err(22358): at android.app.Activity.performResume(Activity.java:5195) 
12-12 10:36:27.088: W/System.err(22358): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2860) 
12-12 10:36:27.088: W/System.err(22358): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2899) 
12-12 10:36:27.088: W/System.err(22358): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
12-12 10:36:27.088: W/System.err(22358): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-12 10:36:27.088: W/System.err(22358): at android.os.Looper.loop(Looper.java:137) 
12-12 10:36:27.088: W/System.err(22358): at android.app.ActivityThread.main(ActivityThread.java:5227) 
12-12 10:36:27.096: W/System.err(22358): at java.lang.reflect.Method.invokeNative(Native Method) 
12-12 10:36:27.096: W/System.err(22358): at java.lang.reflect.Method.invoke(Method.java:511) 
12-12 10:36:27.096: W/System.err(22358): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
12-12 10:36:27.096: W/System.err(22358): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
12-12 10:36:27.096: W/System.err(22358): at dalvik.system.NativeStart.main(Native Method) 

我也把Thread.dumpStack()onPause(),並且日誌再次以:

12-12 10:55:38.502: W/HardwareRenderer(29996): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:55:38.572: W/HardwareRenderer(29996): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:55:46.369: W/HardwareRenderer(29996): Attempting to initialize hardware acceleration outside of the main thread, aborting 
12-12 10:55:50.736: W/HardwareRenderer(29996): Attempting to initialize hardware acceleration outside of the main thread, aborting 

我認爲這與WebView有關,也許密集工作使它暫停和恢復?


此外,我收到編舞的警告。這一切都發生的原因是WebView我相信,因爲它顯示了JavaScript圖表。 WebView是否在主線程中處理?

+1

請發佈您的代碼,以便我們可以理解爲什麼發生這種情況並幫助您 – SoulRayder

+0

之前我已經看到onResume()被調用兩次(沒有onPause())。這是一個三星Galaxy Tab 2. – tristan2468

+0

我張貼了一些代碼,但我不知道是否有更多的代碼需要 – TGO

回答

0

只是一個小小的更新。儘管活動生命週期另有說明,但它調用onResume兩次。但它只在調試時發生,而不是正常情況。所以這可能是一個錯誤。

3

根據活動生命週期,它不可能在運行時執行onResume(),除非它首先執行onPause()

enter image description here

你是否暫停的應用程序呢?也許關閉屏幕(甚至自動)?或者在活動之間改變?如果沒有,我會檢查你是否在你的代碼的其他部分更改ProgressBar和WebView,看起來問題不是onResume。

您總是可以編寫一個Log.i(tag, string)並查看它何時進入該方法。

我想評論,而不是回答,但我沒有足夠的聲譽,對不起。

相關問題