Приложение вылетает после получения телефонного звонка

StackOverflow https://stackoverflow.com/questions/3479433

Вопрос

После того, как я либо получаю телефонный звонок или сделать один, (и другие недокументированные прерывания) Мое приложение получает NullPointexception при возобновлении моей деятельности. Может ли любое объяснить мне, где это и / или как это исправить? Когда моя деятельность возобновляется, это называется oncreate, похоже, и он пытается выполнить что-то, что ноль после возобновления. Как мне предотвратить вызов Onreate ()?

Моя деятельность, кажется, прекращается, когда я нажимаю кнопку вызова, потому что когда я пытаюсь отладить эту ошибку, отладчик отключает.

РЕДАКТИРОВАТЬ:

Итак, как мне обработать процесс -> OnCreate ()? У меня есть мероприятия A -> B -> C -> D, и я нажимаю назад до A, проблем нет. Но если я начну другую программу, или другая программа поступает на передний план, D вылетает, а затем C сбои, затем B сбивается, а затем вылетает!

РЕДАКТИРОВАТЬ:

Я решил B, C, D разбивающуюся. Это потому, что класс, где я сохранил статические переменные, был разрушен для освобождения ресурсов, и моя деятельность получила нулевые переменные.

Но когда я вернусь к A, я получаю классноеexception:

08-13 16:52:10.456: ERROR/AndroidRuntime(6048): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bookcessed.booksearch/com.bookcessed.booksearch.activities.ChooseProviderActivity}: java.lang.ClassCastException: android.view.AbsSavedState$1
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.os.Looper.loop(Looper.java:123)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at java.lang.reflect.Method.invokeNative(Native Method)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at java.lang.reflect.Method.invoke(Method.java:521)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at dalvik.system.NativeStart.main(Native Method)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048): Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.widget.ProgressBar.onRestoreInstanceState(ProgressBar.java:944)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.View.dispatchRestoreInstanceState(View.java:6138)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1209)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1209)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.view.View.restoreHierarchyState(View.java:6117)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1466)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Activity.onRestoreInstanceState(Activity.java:843)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Activity.performRestoreInstanceState(Activity.java:815)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2641)
08-13 16:52:10.456: ERROR/AndroidRuntime(6048):     ... 11 more

Вот мой oncreate ():

super.onCreate(savedInstanceState);
        tempLayout = new RelativeLayout(ChooseProviderActivity.this);
        ProgressBar tempProgress = new ProgressBar(ChooseProviderActivity.this);
        tempProgress.setIndeterminate(true);
        tempProgress.setId(1); //I suspect this is the problem
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.CENTER_IN_PARENT);
        tempLayout.addView(tempProgress, lp);
        setContentView(tempLayout);

Это где я думаю, что проблема лежит:

tempProgress.setId(1); //I suspect this is the problem
Это было полезно?

Решение

Просто для уточнения других людей вам не нужно присвоить ID, чтобы представить, что вы создали в курсе. Так что вы код должны работать только с

ProgressBar tempProgress = new ProgressBar(ChooseProviderActivity.this);
tempProgress.setIndeterminate(true);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
tempLayout.addView(tempProgress, lp);
setContentView(tempLayout);

Идентификаторы только в основном при настройке идентификатора в файлах XML вы назначаете его идентификатором строки, а затем скомпилирован r.java и назначает каждый ресурс идентификационный номер. Не совсем правда! Смотрите редактирование!

РЕДАКТИРОВАТЬ

Как отмечалось Superjos в комментариях, вам нужен идентификатор при работе с относительными макетами. Проверьте документы на Relativelayout.layoutparams.addrule (int, int), когда вам нужен ID.

Конец редактирования

Так...

LinearLayout ll = new LinearLayout(SomeClass.this);
ll.setOrientation(VERTICAL);
TextView tv = new TextView(SomeClass.this);
EditText et = new EditText(SomeClass.this);
ll.add(tv);
ll.add(et);

У этого будет текстовый представление над видом EditText. В другом случае ...

ll.add(et);
ll.add(tv);

Поместите Edittext над TextView. Идентификаторы не имеют абсолютно ничего общего с тем, как они выложены на экране.

Другие советы

Проверьте это изображение, чтобы увидеть, как и когда ОС позволит вам приложение. alt text

Ваше приложение оказывается по какой-то причине, поэтому называется OnCreate. Вы должны сохранить / возобновить состояние приложения, чтобы иметь возможность обрабатывать это правильно. Посмотри на это а также Ссылка разработчиков

Возможно, ваше приложение использует слишком много памяти, поэтому Android OS убивает его, чтобы получить достаточно памяти, чтобы запустить другую активность.

Вы можете попробовать это снова и не посещать звонок или любой процесс, когда ваше приложение загружается. Подождите, пока он не набот.

Почему бы вам не пытаться переопределить все основные функции, которые используются во время жизненного цикла активности. Используйте LOGCAT ADB LOGCAT с Log.V, где возникает ваша ошибка. Положите один журнал после каждой строки в функции, в которой приложение вылетает.

И что ты звонишь? Вы звоните от одного эмулятора к другому? У меня не было проблем с журналом Cat, существующей в таком случае.

Я использовал класс со статическими переменными и звонить .getStoredStaticVariable() а также .saveStoredStaticVariable() И когда я бы попытался получить его, это было бы ноль, вероятно, потому что класс уничтожен, чтобы освободить ресурсы.

Редактировать: это было только частично решением. Решение для ClassCastException() был изменен

tempProgress.setId(1);

К ряду вряд ли использовано системой:

tempProgress.setId(6346346);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top