Dialog利用時のWindowLeakedエラー

閲覧: 6,141 回
最初の未読メッセージにスキップ

Susan

未読、
2010/01/25 3:09:122010/01/25
To: android-...@googlegroups.com
Susanと申します。

ここ数日、Dialog利用中に発生するWindowLeakedエラーの対処方法を調べていたのですが、
解決する見通しがたたないので、恥を偲んで質問することにしました。

どなたか解決方法をご存じの方がいらっしゃいましたら、ご教授願います。


---------------------------------------------------------------
【エラー発生手順 (Android 1.6対象)】
1. DialogTestActivity(下記参照)を開始
2. 縦横切替(OrientationChange)
3. 縦横切替(OrientationChange)
4. エラー発生(下記参照)
---------------------------------------------------------------

---------------------------------------------------------------
【Acrivityソース】
package com.test;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;

public class DialogTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
showDialog(0);
}

@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = new Dialog(this);
dialog.setTitle("title");
return dialog;
}

@Override
protected void onDestroy() {
removeDialog(0);
super.onDestroy();
}
}
---------------------------------------------------------------

---------------------------------------------------------------
【ログ】
01-25 16:33:53.981: DEBUG/dalvikvm(1887): GC freed 1384 objects / 136248 bytes in 111ms
01-25 16:33:55.411: DEBUG/AndroidRuntime(1896): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
01-25 16:33:55.411: DEBUG/AndroidRuntime(1896): CheckJNI is OFF
01-25 16:33:55.611: DEBUG/AndroidRuntime(1896): --- registering native functions ---
01-25 16:33:55.621: INFO/jdwp(1896): received file descriptor 17 from ADB
01-25 16:33:55.851: DEBUG/ddm-heap(1896): Got feature list request
01-25 16:33:56.251: DEBUG/AndroidRuntime(1896): Shutting down VM
01-25 16:33:56.251: DEBUG/dalvikvm(1896): DestroyJavaVM waiting for non-daemon threads to exit
01-25 16:33:56.271: DEBUG/dalvikvm(1896): DestroyJavaVM shutting VM down
01-25 16:33:56.271: DEBUG/dalvikvm(1896): HeapWorker thread shutting down
01-25 16:33:56.271: DEBUG/dalvikvm(1896): HeapWorker thread has shut down
01-25 16:33:56.271: DEBUG/jdwp(1896): JDWP shutting down net...
01-25 16:33:56.271: DEBUG/jdwp(1896): +++ peer disconnected
01-25 16:33:56.271: INFO/dalvikvm(1896): Debugger has detached; object registry had 1 entries
01-25 16:33:56.281: DEBUG/dalvikvm(1896): VM cleaning up
01-25 16:33:56.411: DEBUG/dalvikvm(1896): LinearAlloc 0x0 used 676436 of 4194304 (16%)
01-25 16:33:58.611: INFO/WindowManager(75): onOrientationChanged, rotation changed to 1
01-25 16:33:58.611: INFO/WindowManager(75): Setting rotation to 1, animFlags=0
01-25 16:33:58.611: INFO/WindowManager(75): Config changed: { scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=3 orien=2 layout=18}
01-25 16:33:58.751: DEBUG/StatusBar(75): updateResources
01-25 16:34:00.371: INFO/WindowManager(75): onOrientationChanged, rotation changed to 0
01-25 16:34:00.591: DEBUG/dalvikvm(75): GC freed 5692 objects / 273424 bytes in 216ms
01-25 16:34:00.591: INFO/WindowManager(75): Setting rotation to 0, animFlags=0
01-25 16:34:00.601: INFO/WindowManager(75): Config changed: { scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=3 orien=1 layout=18}
01-25 16:34:00.701: ERROR/WindowManager(1887): Activity com.test.DialogTestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@430b1050 that was originally added here
01-25 16:34:00.701: ERROR/WindowManager(1887): android.view.WindowLeaked: Activity com.test.DialogTestActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@430b1050
that was originally added here
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.view.ViewRoot.<init>(ViewRoot.java:214)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.view.Window$LocalWindowManager.addView(Window.java:409)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.Dialog.show(Dialog.java:238)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.Activity.showDialog(Activity.java:2413)
01-25 16:34:00.701: ERROR/WindowManager(1887): at com.test.DialogTestActivity.onCreate(DialogTestActivity.java:13)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3502)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread.access$2200(ActivityThread.java:116)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1798)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.os.Looper.loop(Looper.java:123)
01-25 16:34:00.701: ERROR/WindowManager(1887): at android.app.ActivityThread.main(ActivityThread.java:4203)
01-25 16:34:00.701: ERROR/WindowManager(1887): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 16:34:00.701: ERROR/WindowManager(1887): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 16:34:00.701: ERROR/WindowManager(1887): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
01-25 16:34:00.701: ERROR/WindowManager(1887): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
01-25 16:34:00.701: ERROR/WindowManager(1887): at dalvik.system.NativeStart.main(Native Method)
01-25 16:34:00.751: DEBUG/StatusBar(75): updateResources
---------------------------------------------------------------


以上、よろしくお願い致します。

pccra...@gmail.com

未読、
2010/01/25 3:29:332010/01/25
To: Android-SDK-Japan
Susan さん こんにちは

ピーシークラフトです。

ぱっと見で

onCreate 内で showDialog がよろしくないと思われます。

onStart 等に移してみてはいかがでしょうか。

Susan

未読、
2010/01/25 4:02:152010/01/25
To: android-...@googlegroups.com
ピーシークラフトさん、早速のレスポンスありがとうございます。
Susanです。

onStartに移してもダメでしたが、onResumeに移したらうまくいきました。
ありがとうございます。

何故ダメなのかが気になりますが・・・

以上です。

pccra...@gmail.com

未読、
2010/01/25 6:43:362010/01/25
To: Android-SDK-Japan
解決したようで何よりです。
私も以前同様なトラブルではまったので。
そのときは幸い、すぐに原因がわかりましたが。

mosaki4

未読、
2010/01/25 9:02:202010/01/25
To: android-...@googlegroups.com
大崎といいます

これは2つの問題がありますね

1.「アクティビティのライフサイクル」の問題

開発の基礎の下のほうに図が載っています
http://developer.android.com/intl/ja/guide/topics/fundamentals.html#lcycles

ちょっと分かりづらいですが、 onStop() や onDestroy() を経由せず
いきなりプロセスが解放される時もあるようです
onResume() , onPause() に読込、保存を等をしたほうがいいようです。

2.「縦横切替」の問題

なにで読んだのか忘れてしまいましたが、
たしか「縦横切替」を行った場合はアクティビティは状態が変わるというより
一旦今のアクティビティを解放して、新しいアクティビティを生成しているようです。
そのためそれを考慮せず作成した場合アクティビティが知らない間に
複数起動してしまうことがあります。

以上、蛇足でした。


2010年1月25日17:09 Susan <androidapp...@gmail.com>:

--
このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。


Susan

未読、
2010/01/26 0:11:542010/01/26
To: android-...@googlegroups.com
大崎さん、回答ありがとうございます。
Susanです。


>1.「アクティビティのライフサイクル」の問題
>
>開発の基礎の下のほうに図が載っています
>http://developer.android.com/intl/ja/guide/topics/fundamentals.html#lcycles
>
>ちょっと分かりづらいですが、 onStop() や onDestroy() を経由せず
>いきなりプロセスが解放される時もあるようです
>onResume() , onPause() に読込、保存を等をしたほうがいいようです。

確かに、onStop() や onDestroy() は経由されないことがあるようですね。
onPause()でremoveDialog()を呼ぶように修正しました。


>2.「縦横切替」の問題
>
>なにで読んだのか忘れてしまいましたが、
>たしか「縦横切替」を行った場合はアクティビティは状態が変わるというより
>一旦今のアクティビティを解放して、新しいアクティビティを生成しているようです。
>そのためそれを考慮せず作成した場合アクティビティが知らない間に
>複数起動してしまうことがあります。

そのようですね。
実際に利用しているDialogはProgressDialogで、ProgressDialogを生成したActivityが
AsyncTaskのonPostExecuteからコールバックされるような作りになっているのですが・・・
コールバックされるインスタンスはActivityではない方が良さそうですね。
もう一度よく考えてみます。


ありがとうございました。

全員に返信
投稿者に返信
転送
新着メール 0 件