0

いくつかのテスト中に、新しいエミュレーターを作成しなければならないところまでエミュレーターをフリーズすることができました。Class.forName threw以下のコードでは、誤ってクラス名とRuntimeException() ClassNotFoundException. その後ActivityManager、 が実行さ れStart proc org.acra.CrashReportDialogます。これはループで実行されており、エミュレーターをフリーズさせます。おそらく、onCreate()決して終了しないためです。よくわかりません。

エミュレーターが起動するとandroid.permission.RECEIVE_BOOT_COMPLETED、アプリを起動する があります。

Class.forNameコードを移動するApplication onCreate()か、より良いコードを書く以外に、これを防ぐ方法はありますか?

    public class Application extends android.app.Application {
           @Override
            public void onCreate() {
                super.onCreate();
                ACRA.init(this);
                ACRA.getErrorReporter().setReportSender(new AcraReportSender(this));
                // gets id, create it if it dose not exist
                ACRA.getErrorReporter().putCustomData("APPLICATION_ID_UUID", SettingsManager.applicationId());
                Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
                ArrayList<String> contactManager = new ArrayList<String>();
                TypedArray contactManagerClasses = getResources().obtainTypedArray(R.array.contact_managers);
                for (int index = 0; index < contactManagerClasses.length(); index++)
                    contactManager.add(contactManagerClasses.getString(index));
                contactManagerClasses.recycle();
                TypedArray managerClasses = getResources().obtainTypedArray(R.array.managers);
                for (int index = 0; index < managerClasses.length(); index++)
                    if (isContactsSupported() || !contactManager.contains(managerClasses.getString(index)))
                        try {
                            Class.forName(managerClasses.getString(index));
                            Log.d("Application","LOADING MANAGER " + managerClasses.getString(index));                  
                        } catch (ClassNotFoundException e) {
                            throw new RuntimeException(e);
                        }
                managerClasses.recycle();

                TypedArray tableClasses = getResources().obtainTypedArray(R.array.tables);
                for (int index = 0; index < tableClasses.length(); index++)
                    try {
                        Class.forName(tableClasses.getString(index));
                        Log.d("Application","LOADING TABLE " + managerClasses.getString(index));                    
                    } catch (ClassNotFoundException e) {
                        throw new RuntimeException(e);
                    }
                tableClasses.recycle();
                onServiceStarted();
            }
......
....
4

1 に答える 1

1

短い答えいいえ。

ACRA を削除した場合でも、アクティビティが何度も再起動されていることがわかります。これは、Android がクラッシュしたアプリを再起動しようとするためです。あなたの場合、アプリの構築中にクラッシュしています。

あなたのスタートアップを確実なものにするための最善のアドバイスです。

于 2013-11-04T21:39:37.393 に答える