0

ポートレートとランドスケープで2つのレイアウトを使用するアプリケーションがあります。初期ロード時にコンテンツフォームWebをロードするには、AsyncTaskとプログレスバーを使用します。

これを確認しました。私は2つのレイアウトを持っているので、これは解決策ではありません。

例外を以下に示します。

> 05-08 16:44:43.483: E/WindowManager(20138): Activity com.news.one has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@482b0130 that was originally added here
05-08 16:44:43.483: E/WindowManager(20138): android.view.WindowLeaked: Activity com.news.one has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@482b0130 that was originally added here
05-08 16:44:43.483: E/WindowManager(20138):     at android.view.ViewRoot.<init>(ViewRoot.java:247)
05-08 16:44:43.483: E/WindowManager(20138):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:181)
05-08 16:44:43.483: E/WindowManager(20138):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:124)
05-08 16:44:43.483: E/WindowManager(20138):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.Dialog.show(Dialog.java:241)
05-08 16:44:43.483: E/WindowManager(20138):     at com.news.one$DownloadNews.onPreExecute(AdaDeranaTabActivity.java:365)
05-08 16:44:43.483: E/WindowManager(20138):     at android.os.AsyncTask.execute(AsyncTask.java:391)
05-08 16:44:43.483: E/WindowManager(20138):     at com.news.one.onCreate(AdaDeranaTabActivity.java:201)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-08 16:44:43.483: E/WindowManager(20138):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 16:44:43.483: E/WindowManager(20138):     at android.os.Looper.loop(Looper.java:123)
05-08 16:44:43.483: E/WindowManager(20138):     at android.app.ActivityThread.main(ActivityThread.java:4627)
05-08 16:44:43.483: E/WindowManager(20138):     at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:44:43.483: E/WindowManager(20138):     at java.lang.reflect.Method.invoke(Method.java:521)
05-08 16:44:43.483: E/WindowManager(20138):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-08 16:44:43.483: E/WindowManager(20138):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-08 16:44:43.483: E/WindowManager(20138):     at dalvik.system.NativeStart.main(Native Method)
05-08 16:44:54.065: E/AndroidRuntime(20138): FATAL EXCEPTION: main
05-08 16:44:54.065: E/AndroidRuntime(20138): java.lang.IllegalArgumentException: View not attached to window manager
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:388)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:233)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.view.Window$LocalWindowManager.removeView(Window.java:432)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.app.Dialog.dismissDialog(Dialog.java:278)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.app.Dialog.access$000(Dialog.java:71)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.app.Dialog$1.run(Dialog.java:111)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.app.Dialog.dismiss(Dialog.java:268)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at com.news.one$DownloadNews.onPostExecute(AdaDeranaTabActivity.java:376)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at com.news.one$DownloadNews.onPostExecute(AdaDeranaTabActivity.java:1)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.os.AsyncTask.finish(AsyncTask.java:417)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.os.Looper.loop(Looper.java:123)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at android.app.ActivityThread.main(ActivityThread.java:4627)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at java.lang.reflect.Method.invoke(Method.java:521)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-08 16:44:54.065: E/AndroidRuntime(20138):    at dalvik.system.NativeStart.main(Native Method)

アプリケーションが自分でロードするまで回転の変更をロックする方法はありますか?

または他のアイデア?

前もって感謝します。

4

4 に答える 4

1

向きを切り替えると、Androidは新しいビューを作成します。バックグラウンドスレッドが古いスレッドの状態を変更しようとしているため、クラッシュが発生している可能性があります。(バックグラウンドスレッドがUIスレッド上にないため、問題が発生している可能性もあります)。これらは解決策です:

進行状況ダイアログとバックグラウンドスレッドがアクティブなときに画面の向きの変更を処理するにはどうすればよいですか?

ローテーションAndroidでアクティビティを再開

于 2013-01-31T01:31:12.097 に答える
0

メソッドでを呼び出しましprogressDialog.dismiss()onDestroy()

向きの変更中に、アクティビティが再開されます。したがって、再起動する前に、現在のprogressDialogを破棄する必要があります。これでうまくいきます。:D

于 2012-05-09T08:02:57.803 に答える
-1

WindowLeak例外が発生します。この例外は、ダイアログ/プログレスバーがコンテキストの参照を使用し、方向の変更により失われたコンテキスト参照を使用する場合に発生します。

したがって、マニフェストファイル内のすべてのアクティビティタグのコードを以下に示します。

android:configChanges="orientation|keyboard"

例:

<activity
            android:name=".InviteActivity" android:configChanges="orientation|keyboard"/>

アクティビティで以下のコードを使用します

 @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        setContentView(R.layout.YOUR_LAYOUT);
        super.onConfigurationChanged(newConfig);
    }
于 2012-05-08T12:20:44.740 に答える
-1

私は同じ問題を抱えていて、同期を開始する前に向きをロックし、同期後に元に戻すという方法で解決しました。

// before
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

// after synchronisation: 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
于 2012-05-09T05:21:07.037 に答える