У меня возникла странная проблема в приложении Android, которое я создаю, это приложение, по сути, приложение для замены домашнего экрана, которое будет добавлено в устройство в качестве домашнего экрана по умолчанию.Чтобы выполнить некоторые действия по инициализации, я расширил класс приложения Android, и в методе onCreate()
я в основном регистрирую некоторого наблюдателя и запускаю службу, вот код:
public class MyApplication extends Application implements ExternalStorageListener {
private ExternalStorageObserver externalStorageObserver;
public void onCreate() {
Log.i("MyApplication", "Starting application");
super.onCreate();
externalStorageObserver = new ExternalStorageObserver(this);
if(externalStorageObserver.isExternalStorageAvailable()) {
// this builds a list of files present in the SD card
// which is being used through the application to do
// some work
buildData();
File externalFileDir = getApplicationContext().getExternalFilesDir(null);
if(externalFileDir != null && externalFileDir.isDirectory()) {
// do something...
}
}
//Register listener to observe external storage state
registerExternalStorageObserver();
Log.i("SyncService", "Starting sync service...");
ComponentName cmp = startService(new Intent(getApplicationContext(), SyncService.class));
Log.i("SyncService", cmp.toString());
}
private void registerExternalStorageObserver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
registerReceiver(externalStorageObserver, filter);
}
private void buildData() {
// builds a list
}
}
Содержимое файла манифеста:
<application android:persistent="true" android:icon="@drawable/icon"
android:label="@string/app_name" android:name="com.webgyani.android.MyApplication"
android:debuggable="true">
<activity android:name=".HomeTabActivity" android:launchMode="singleInstance"
android:stateNotNeeded="true" android:theme="@style/LightTabsTheme"
android:screenOrientation="landscape" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
Это прекрасно работает, когда я устанавливаю приложение с помощью Eclipse или вручную устанавливаю apk на устройство.После того, как приложение установлено, все работает нормально, я имею в виду вышеупомянутый метод onCreate()
, вызываемый и служба также запускается нормально, но если я перезагружаю устройство на этот раз, метод onCreate()
не вызывается (ни один из операторов журнала не появляетсяа также сервисы не запускаются).После некоторой отладки я заметил, что это происходит только в том случае, если я устанавливаю свое приложение в качестве приложения запуска по умолчанию / домашнего экрана и после этого перезагружаю устройство, потому что после того, как вы установите приложение в качестве запуска запуска по умолчанию, Android должен автоматически запускать ваше приложение в качестве домашнего экрана после перезагрузки.В моем случае приложение запускается, но этот код не выполняется.
Я пытался использовать отладчик, но это не сработало, потому что, когда я перезагружаю устройство, отладчик отключается, и к тому времени, когда отладка по USB включается, мойприложение уже запущено.
Я даже дважды проверил Logcat, но не увидел никаких ошибок.Я думал о намерении BOOT_COMPLETED инициализировать эту часть, но это потребует некоторого рефакторинга кода, который я не собираюсь делать в данный момент, если не будет решения.
Так что мне любопытно узнать, чтоявляется ли это стандартным поведением, или есть известная ошибка, которая вызывает это, потому что я предполагаю, что метод onCreate
приложения всегда будет вызываться при каждом запуске приложения.Я пробовал все, что мог с утра, но ничего не получалось, не мог точно определить проблему, если кто-то из вас мог бы пролить на это свет, то это было бы очень признательно.
Спасибо