2013-12-12 57 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)并查看它何时进入该方法。

我想评论,而不是回答,但我没有足够的声誉,对不起。

相关问题