アクティビティと 2 つのフラグメント (android.support.v4.app.Fragment) で構成されるアプリで非常に奇妙な問題が発生しています。
問題は、タブレットを回転させると、アプリがすぐにクラッシュすることです。
数日前、すべてが正常に機能していましたが、パッケージ名を変更する必要があり、いくつかのエラーが発生しましたが、なんとか修正しました。その直後に問題が発生しましたが、エラーがどこにあるのかわかりません。アプリが破棄され、再起動され、再開され、作成された直後に得られる Logcat は次のとおりです。
10-08 17:00:14.930: D/dalvikvm(18155): GC_CONCURRENT freed 394K, 8% free 7792K/8455K, paused 1ms+4ms
10-08 17:00:14.930: D/AndroidRuntime(18155): Shutting down VM
10-08 17:00:14.930: W/dalvikvm(18155): threadid=1: thread exiting with uncaught exception (group=0x40bee1f8)
10-08 17:00:14.938: E/AndroidRuntime(18155): FATAL EXCEPTION: main
10-08 17:00:14.938: E/AndroidRuntime(18155): java.lang.IllegalStateException: No activity
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1065)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1854)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:431)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.support.v4.app.FragmentActivity$1.handleMessage(FragmentActivity.java:90)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.os.Looper.loop(Looper.java:137)
10-08 17:00:14.938: E/AndroidRuntime(18155): at android.app.ActivityThread.main(ActivityThread.java:4514)
10-08 17:00:14.938: E/AndroidRuntime(18155): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 17:00:14.938: E/AndroidRuntime(18155): at java.lang.reflect.Method.invoke(Method.java:511)
10-08 17:00:14.938: E/AndroidRuntime(18155): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
10-08 17:00:14.938: E/AndroidRuntime(18155): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-08 17:00:14.938: E/AndroidRuntime(18155): at dalvik.system.NativeStart.main(Native Method)
問題は FragmentManager から発生しますが、詳細がないため、理由はわかりません。このサイトで見つけた解決策を試して、キャッチされていない例外をキャッチして詳細情報を取得しましたが、得られた結果は、ある種のメモリ不足エラーが発生するまで同じLogcatが何度も繰り返されました(logcatの文字列が多すぎます)。
私のアクティビティのレイアウトは次のとおりです。Androidのライフサイクルではうまく機能しますが、画面の回転では機能しません:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id = "@+id/mainview"
tools:context=".MyActivity" >
<fragment
android:id="@+id/missionFragment"
android:layout_width="350dip"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize"
android:name="com.xxx.xxx.MissionFragment">
</fragment>
<fragment
android:id="@+id/mapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.xxx.xxx.MapFragment">
</fragment>
</LinearLayout>
マニフェストはすぐそこにあります:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="11" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:icon="@drawable/logo"
android:label="@string/app_name" >
<activity
android:name=".MySIGActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
エラーがどこで発生するか、どの Android ライフサイクル メソッドで発生するかについて誰かが考えている場合は、それを歓迎します!
ありがとう。
更新 1.1: これが私のメイン アクティビティの onCreate メソッドです:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getApplicationContext();
currentEtape = 1;
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
// Désactiver l'affichage du titre de l'application et son icône
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
setContentView(R.layout.main);
SharedPreferences prefs = getPreferences(0);
trackingGPS = prefs.getBoolean("trackingGPS", false);
if(trackingGPS){
TextView viewTrackingActive = (TextView)findViewById(R.id.textview_notif_tracking);
viewTrackingActive.setText(this.getString(R.string.active));
viewTrackingActive.setTextColor(Color.parseColor("#99CC00"));
}
else{
TextView viewTrackingDesactive = (TextView)findViewById(R.id.textview_notif_tracking);
viewTrackingDesactive.setText(this.getString(R.string.desactive));
viewTrackingDesactive.setTextColor(Color.parseColor("#CC0000"));
}
// No interaction with Fragment or Activity classes in these methods
instanciateLayersDialog();
instanciateBasemapDialog();
}
そして onResume メソッド:
public void onResume(){
super.onResume();
SharedPreferences prefs = getPreferences(0);
trackingGPS = prefs.getBoolean("trackingGPS", false);
System.out.println("activity resume");
}