Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Поймать UncaughtExceptions и запустить ErrorActivity - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Выключение экрана по нажатию кнопки http://www.cyberforum.ru/android-dev/thread1811202.html
Необходимо выключить экран по нажатию кнопки. Пробовал KeyguardManager, но метод KeyguardLock зачеркивается в android studio. Пробовал DevicePolicyManager, но метод .lockNow() привел к аварийном...
Программирование Android Передача объекта обратно в главный поток из другого потока Добрый день. У меня ест фрагмент в котором я запускаю новый поток, после этого я хочу вернуть объект из этого потока в главный поток, как это лучше сделать? public class IFragment extends... http://www.cyberforum.ru/android-dev/thread1811171.html
Операции с фрагментами Программирование Android
Если вызвать транзакцию remove для текущего фрагмента в контейнере. То вызовется ли у этого фрагмента метод onDestroy? Добавлено через 1 минуту Если вызвать replace то у текущего фрагмента в...
Взаимодействие базы данных на SQLlite и Фрагмента и RecyclerView Программирование Android
Доброго времени суток. Суть проблемы в следующем: есть база с некоторым набором данных, есть фрагмент, куда внедрен RecyclerView для их отображения. Подтянуть данные из таблицы при загрузке - ...
Программирование Android Запуск приложений с Vulkan API на Андроид http://www.cyberforum.ru/android-dev/thread1811043.html
Доброго времени суток, форумчане! С выходом нового графического API Vulkan компания Samsung продемонстрировала работу демки Protostar на своём флагманском Galaxy S7, и побещали поддержку нового...
Программирование Android Как вытащить файл из эмулятора? Сгенерировал в приложении и вроде даже записал файл wav. Теперь не знаю, как его вытащить для анализа. На телефоне без рута папки приложения не видно. А на эмуляторе подозреваю, что всё лежит в img... подробнее

Показать сообщение отдельно
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
23.09.2016, 22:04
AlexV1, так работает
MainActivity
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.et;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                int i = Integer.parseInt("23,222.345");
            }
        });
    }
 
}

ErrorActivity
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.example.et;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
 
public class ErrorActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_error);
    }
 
}

App
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.et;
 
import android.app.Application;
import android.content.Intent;
 
public class App extends Application {
    @Override
    public void onCreate() {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable e) {
                Intent i = new Intent();
                i.setClassName("com.example.et", "com.example.et.ErrorActivity");
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
                
                System.exit(1);
            }
        });
 
        super.onCreate();
    }
 
}

Manifest
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.et"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name="App" >
        <activity
            android:name="com.example.et.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.et.ErrorActivity"
            android:label="@string/app_name" >
        </activity>
    </application>
 
</manifest>

принципиальных отличий от вашего кода никаких кроме убийства после запуска активити с сообщением об ошибке
причина по которой активити не хотело показываться скорее всего в этом
You're not seeing anything because the exception happened on your UI thread and the stack unrolled all the way.
убийство скорее всего развязывает этот узел и дает активити с сообщением об ошибке стартовать
кроме того в некоторых источниках советуют добавить к активити с сообщением об ошибке в манифест вот такую магию
XML
1
android:process=":report_process"
You can add attribute android: process=":report_process" to the <activity> element which refers to your bug report activity in AndroidManifest.xml.

By default, activities belong to the same appliction would run in the same process identified by your package name. By setting android: process attribute, you can override this. android: process starting with : refers to a private identifier within your package, so that you can start the activity in a new process without conflicting other packages' process.
с этой магией активити с сообщением об ошибке стартует даже без убийства, но нажатие кнопки назад в этом случае возвращало меня на мертвую активити вызвавшую исключение
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru