У меня эта проблема уже почти 2 месяца и не могу понять. Проблема в том, что если мое приложение запущено и я запустил (переустановил) мое приложение из Eclipse, я получаю сообщение об ошибке, указывающее, что мое приложение разбилось "К сожалению, остановилось". Я замечаю, что это также происходит, когда я убегаю от своего ПК /Eclipse, я думаю, что это происходит только после того, как я не запускаю его некоторое время.
Это происходит только в том случае, если приложение активно в третьем действии (BaseDiagramActivity), а затем снова запускаю приложение из Eclipse. Я удалил в основном все приложения, кроме трех видов деятельности, и это все еще происходит.
Я искал и искал решение этой проблемы, но не могу найти хороший ответ или тот, который применим ко мне.
Это не похоже на проблему с аппаратной или андроидной версией, так как я запускаю ее на своем планшете (4.0.3), а мой телефон (4.0.2, произошел в версии 4.0.1 перед обновлением). Если, конечно, это бутерброд с мороженым.
Сообщите мне, требуется ли дополнительная информация.
Исключение (Tag = AndroidRuntime)
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
at android.app.LoadedApk.makeApplication(LoadedApk.java:482)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3938)
at android.app.ActivityThread.access$1300(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:305)
at android.app.LoadedApk.makeApplication(LoadedApk.java:474)
... 11 more
Код Android
LoadedApk.initializeJavaContextClassLoader() - строка 362 кажется нарушителем
Ниже приведены соответствующие файлы:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="[my package]"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="HomeActivity"
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="LoadDiagramActivity" android:label="Load Diagram"></activity>
<activity android:name="BaseDiagramActivity" android:label="Base Diagram"></activity>
</application>
</manifest>
HomeActivity.java
public class HomeActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Button diagramButton = (Button)findViewById(R.id.diagram);
diagramButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this, LoadDiagramActivity.class));
}
});
}
}
LoadDiagramActivity.java
public class LoadDiagramActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.load_diagram_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.add_new_diagram:
startActivity(new Intent(this, BaseDiagramActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
BaseDiagramActivity.java
на самом деле не имеет значения, что это за активность, исключение происходит до тех пор, пока запускается "третье" действие (или нажатие кнопки добавления на LoadDiagramActivity.
public class BaseDiagramActivity extends Activity {
}
home.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/diagram"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Diagram" />
</LinearLayout>
Дополнительная информация
Когда я удалил свой проект, чтобы попросить более простой ответ, я переместил все в пространство имен пакетов. В фактическом проекте есть 5 пространств имён, они все еще присутствуют, когда я тестировал с урезанной версией, но просто не вызывал (насколько я мог видеть).
Вот пакеты:
-
[package]- общая логика -
[package].activities- все действия и базовые действия. -
[package].database- все взаимодействие с базой данных -
[package].models- модели для сохранения/загрузки данных -
[package].renderables- объекты, нарисованные на холсте
Я попытался добавить атрибут `android: sharedUserId 'в манифест, и, похоже, я ничего не делал в обоих случаях. Когда я первоначально изучал это, я пришел к выводу, что идентификатор общего пользователя применяется только к различным проектам, а не к различным пакетам.
Кроме того, я не думаю, что было какое-то взаимодействие с базой данных, когда я все лишился. Тот факт, что 3-я деятельность может быть любой деятельностью, даже HomeActivity, была чем-то против этой теории.
Полезные ссылки
- qaru.site/info/63422/...
- GreoCode android.app.LoadedApk на 4.0.1
- Возможное состояние гонки,
- Проблема с Android # 25869
Обновление 1/11/2012
Последние пару дней назад я вернулся в этот проект, я создал совершенно новый проект в Eclipse Juno (ранее был на Helios) и передал все вручную, чтобы инструменты Eclipse и Android обрабатывали практически все взаимодействия Manifest, но он все еще происходит. Я посмотрю на это немного больше в течение следующих нескольких дней и обновляю, если найду что-нибудь.
FYI мой новый проект нацелен на следующее:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
Новая структура проекта также имеет все действия в корневом пакете (т.е. [package], а не [package].activities). Я также использую синтаксис (новый?), Чтобы показать родительскую активность:
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="[my package].LoadDiagramActivity" />
Он также по-прежнему происходит на моем обновленном Galaxy Nexus, на котором работает Jellybean 4.1.2.