2012-03-13 13 views
0

AsyncTaskを拡張する完全に別のクラスを使用しています.HTML getを実行するために使用するため、UIはフリーズしません。 AsyncTask Imのコンストラクタで、タスクの.execute()を呼び出すアクティビティのコンテキストを渡すので、htmlgetの実行中にProgressDialogを表示できます。ここで最初の問題が発生しました。電話機を回転させると、現在のビューが破棄され、ダイアログの.dismiss()に達したときに、アプリケーションが接続されたビューがもう存在しないためクラッシュしました。私はこの問題を95%のように解決することができましたが、残りの5%ではまだ問題があります。 htmlgetが同様AsyncTaskする活性を通過させることによって、実行、およびonPreExecuteにAsyncTaskでProgressDialogを終了する際にエラーが発生する

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 

を呼び出す()、及び

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

を呼び出している間、私の最初の溶液は、回転を無効に強制することでしたonPostExecute()では、ユーザーが画面を回転しても、現在のアクティビティは破棄されません。しかし、私がすでに述べたように、残りの5%には、依然として問題があり、それが強制的に閉鎖されています。

それはAsyncTaskで起こる
java.lang.IllegalArgumentException: View not attached to window manager 
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:381) 
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:226) 
at android.view.Window$LocalWindowManager.removeView(Window.java:432) 
at android.app.Dialog.dismissDialog(Dialog.java:278) 
at android.app.Dialog.access$000(Dialog.java:71) 
at android.app.Dialog$1.run(Dialog.java:111) 
at android.app.Dialog.dismiss(Dialog.java:268) 
at com.vasga.telvira.AsyncHttpGetter.onPostExecute(AsyncHttpGetter.java:160) 
at com.vasga.telvira.AsyncHttpGetter.onPostExecute(AsyncHttpGetter.java:1) 
at android.os.AsyncTask.finish(AsyncTask.java:417) 
at android.os.AsyncTask.access$300(AsyncTask.java:127) 
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3691) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
at dalvik.system.NativeStart.main(Native Method) 

は、次の行に(これはで説明した160番目の行である:私は私のユーザーは、Androidマーケット経由で私を供給し、このスタックトレース、持っている

:私が知っているすべては以下の通りです。 StackTrace):私は可能な解決策として、if節は、多分ダイアログは、いくつかのまれに表示されていなかったが、それがうまくいかなかったと付け加えたので、

if(pd.isShowing()) pd.dismiss(); //dismiss the pd after we are done, if it is visible(it should be) 

pd.isShowingは()、これを引き起こすことができません

私のアプリケーションはAndroid 1.6.xのと互換性がありますが、私は、「SDカードに移動」機能は、少数のユーザーがメッセージを送ったから判断

を有効にしているので、コンパイルレベルは、EclipseでのAndroid 2.2.xのためにsettedています、彼らはhtmlgetを起動し、ProgressDialogがポップアップしてアプリケーションがクラッシュする可能性が最も高いです。

何が原因なのでしょうか?またはそれを解決する方法は? NOSENSORのアプローチは正しいですか?

+0

それはトリッキーです。あなたのアプリケーションが一時停止/再開するたびに、進捗ダイアログを再作成/非表示にする必要があります。 – zapl

+0

このhtmlgetが進行中の間、アプリケーションは一時停止しません。普通の状況ではたいてい5秒かかるので、なぜこれが起こるのかわかりません。 – hundeva

+1

画面が回転すると、 'onResume'の回転が終了すると' onPause'が得られます。 AsyncTaskは引き続き実行されます。再開時に動的にダイアログを再作成すると問題はありません。 – zapl

答えて

0

エラーが発生したようですが、少なくとも私は新しいバージョンでは新しいレポートを受け取っていません。その後、

public Dialog onCreateDialog(int id) 

、私はタスクに活動を渡された、と私は、ダイアログを示したときに、最初にnosensorのthingieをsetted、これをしなかった:私は何をやったことは私が主な活動でこれをオーバーライド、だった

activity.dismissDialog(0); 

このように動作するようだ:私はそれを却下しなければならなかったとき

activity.showDialog(0); 

、その後、私はこれをしませんでした。構文エラーがある場合は私にご容赦ください。私の開発者のコ​​ンピュータにはありません:)

関連する問題