2012-05-08 11 views
0

私は、ポートレートと風景の2つのレイアウトを使用するアプリケーションを持っています。最初のロード時にコンテンツフォームのWebをロードするには、AsyncTaskとプログレスバーを使用します。アンドロイドのアプリケーションがクラッシュするとき

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

例外は次のとおりです。

> 05-08 16:44:43.483: E/WindowManager(20138): Activity com.news.one has leaked window [email protected] that was originally added here 
05-08 16:44:43.483: E/WindowManager(20138): android.view.WindowLeaked: Activity com.news.one has leaked window [email protected] 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) 

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

または他のアイデアですか?

ありがとうございます。

+0

あなたは再びあなたが向きをやっているときに適用されているロジックで考えなければなりません。 –

+0

私は 'onDestroy()'メソッドで 'progressDialog.dismiss()'をもう一度呼び出しました。 オリエンテーションの変更中に、アクティビティが再開します。したがって、再起動する前に、現在のprogressDialogを破棄する必要があります。これはトリックです。 :D – saji159

+0

はい...それは私が通信したいです –

答えて

0

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

オリエンテーションの変更中に、アクティビティが再開します。したがって、再起動する前に、現在のprogressDialogを破棄する必要があります。これはトリックです。 :D

-1

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

マニフェストファイル内のすべてのアクティビティタグに以下のコードを入れてください。

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); 
    } 
+0

これは動作しません。私は2つのレイアウトを持っています。私はその活動をロックすることはできません。 – saji159

+0

編集したコードを見てください。私はそれをテストしましたが、これはうまくいきます。 –

+1

この方法**は、縦横両方向で同じレイアウトを使用します**。 再確認しました。しかし、動作していません...( – saji159

-1

活動にコードの下に使用し、それを設定します同期後のバック:

// before 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 

// after synchronisation: 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
0

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

How to handle screen orientation change when progress dialog and background thread active?

Activity restart on rotation Android

関連する問題