2015-08-25 2 views
0

В этом сценарии мое приложение для Android помещается в фоновом режиме пользователем, нажимая кнопку «Домой», отвечает на входящий звонок, записывает уведомление и т. Д. Таким образом, они смотрят на Facebook, играют в Asphalt 8, что угодно что заставит Android OS найти, что ей нужно больше памяти и убейте мое приложение для Android. Пользователь решает, что они хотят оглянуться на мое приложение, нажмите значок и BOINK!Коррумпированный Android savedInstanceState

Когда приложение запускается после того, как оно было убито операционной системой, основная активность передается с сохраненнымInstanceState, который содержит два ключа: android: viewHierarchyState и android: поддержка: фрагменты. Это 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) 
.... 

Таким образом, операционная система использует данные, которые он написал в 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's onCreate.

+0

Извините, я должен был упомянуть, что я посмотрел на этот вопрос, и в моей навигационной странице код: 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' ? возможно, это также сохраняет нуль? – Jhoon

Смежные вопросы