ターゲティングプラットフォームバージョン7
は、多くのデバイスで散発的ですが定期的に発生します。
2.1でより頻繁に発生する可能性があります。
エラーは分析によって報告されますが、その後のリビジョンでは、特定の問題に絞り込まれています。
ここにあるものと非常によく似たコードを使用してダイアログを作成しています。
こんにちは、私は奇妙ですが非常に深刻な問題を抱えています。私のアプリケーション(ゲーム)では、さまざまなイベントをユーザーに通知するためのカスタムダイアログを作成しています。バージョン8で追加されたshowDialog(int、Bundle)ではなく、showDialog(int)を使用しています。これらのダイアログは、データを表示するためにアクティビティで作成されたオブジェクトを参照します。onCreateDialogが呼び出されると、オブジェクトはnullになり、デバイスが強制終了されます。私の仮説は、ダイアログをトリガーすることはアクティビティをトリガーすることに似ているということです。Androidがメモリを必要とする場合、呼び出し元のアクティビティからメモリをクリーンアップします。
より詳しい情報:
1:オブジェクトが私のコードによってnullに設定されているわけではありません。これは、A:オブジェクトはいたるところに参照されており、ダイアログが作成される前にnullポインターをスローする機会がいくつかあるためです。また、showDialog()を呼び出す直前に値を報告しました。B:デフォルト値がないことを除けば、nullに設定されることはありません。C:例外中にnullではない他の変数の値を報告しようとすると、それらもnullであることがわかります。例:createDialogに役立たない、決してnullではない文字列を参照すると、それもnullであることがわかります。ただし、デフォルト値もありません。ダイアログが正しくないので、デフォルト値は役に立ちません。
2:アプリはかなりの量のメモリを使用しますが、私は快適な量の制限内にあるはずです。
3:ゲーム内の特定のダイアログは問題が発生しやすいですが、非常にまれですが、メインの「最も重い」アクティビティ以外のアクティビティで発生しています。
コードは大まかに次のようになりますが、フローを言い換えると、実際のアクティビティは約1000行です。
Class DataStructure {
String ID;
String Description;
String name;
boolean hasSpace;
//initialize based on XML
}
Class Main extends Activity etc etc{<br>
DataStructure selectedData;
onClick{
if(gameState == 1){
selectedData = constructSelectedData();
if(selectedData == null){
//report error. Never happens.
}
}else if (gameState == 2){
if(selectedData == null){
//report error, never happens.
}
showDialog(5);
}
onCreateDialog(int dialogDesired){
if(dialogDesired == 5){
if(selectedDialog.hasSpace){//NULL POINTER HERE REGARDLESS OF VARIABLES REFERENCED.
//set up dialog using typical builder model
}
}
}
編集:スタックトレース
原因:java.lang.NullPointerException at com.company.game.activity.GameMainMenuActivity.onCreateDialog(GameMainMenuActivity.java:1521)at android.app.Activity.onCreateDialog(Activity.java:2472)at android.app.Activity.createDialog (Activity.java:881)at android.app.Activity.restoreManagedDialogs(Activity.java:870)at android.app.Activity.performRestoreInstanceState(Activity.java:816)at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java: 1096)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2715)で
スタックトレースに関する注意事項:アクティビティを復元しているようですが、どこにも移動していないため、奇妙です。ダイアログが表示されている間、または問題なく作成するために、アクティビティからホームボタンを押すことができます。実際、GameMainMenuActivityの一部として、ゲームは復元時にリセットされます。このバグは非常に一般的であるため、特定の場所でユーザーがゲームからホームスクリーニングを行う場合である可能性はほとんどありません。私はこれらの数十を1日に報告します。