2015-08-25 34 views
0

情景是这样的,我的Android应用程序被放置在后台,用户点击主页按钮,接听来电,点击通知等。所以,他们看Facebook,玩Asphalt 8,任何东西这会导致Android操作系统发现它需要更多内存并杀死我的Android应用程序。用户决定他们想回顾我的应用,点击图标和BOINK!损坏的Android savedInstanceState

当应用程序被操作系统杀死后启动时,主Activity将传递一个savedInstanceState,其中包含两个键:android:viewHierarchyState和android:support:fragments。这savedInstanceState传递给片段和崩溃,说明该片段没有创建一个视图:

Caused by: java.lang.IllegalStateException: Fragment com.foo.SomeFragment did not create a view. 
    at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2200) 
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:404) 
    at android.app.Activity.setContentView(Activity.java:2156) 
    at com.foo.NavigationPage.onCreate(NavigationPage.java:774) 
    at android.app.Activity.performCreate(Activity.java:5958) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) 
    at android.app.ActivityThread.access$800(ActivityThread.java:144) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) 
.... 

因此,使用数据的OS它写了的savedInstanceState当它杀了应用程序,但由于某些原因,它在应用程序使用它在启动时自行创建时已损坏。

我曾尝试NavigationPage活动中这样做:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null) 
} 

这对于移动应用程序启动时,如果您的移动应用进入后台,你点击图标,你希望它去回来这里工作,但你离开了。传递null导致应用程序遍历其所有的屏幕构建/加载过程,这是耗时的,而不是我们想要的用户体验。

关于可能发生什么或我该如何避免这种情况的想法?

回答

0

这已经在这里找到答案: Fragment did not create a view

其字面意思是:

你需要扭转这样的:

setContentView(R.layout.main_activity); 
super.onCreate(savedInstanceState). 

成这样:

super.onCreate(savedInstanceState). 
setContentView(R.layout.main_activity); 

在你的行为ivity的onCreate

+0

对不起,我应该提到我看过这个问题,并在我的NavigationPage中,代码是:super.onCreate(savedInstanceState); setContentView(R.layout.navigation); –

+0

我也没有喜悦地看着这篇文章:http://stackoverflow.com/questions/19874882/android-view-inflateexception-binary-xml-file-error-inflating-class-fragment –

+0

'onSaveInstanceState'方法怎么样?也许它也保存一个null? – Jhoon