2015-08-25 104 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