1

Myは、ファイルからデータをロードし、クラシック ブックの UI を更新するActivityを作成します。しかし、Android は起動 直後に アクティビティを配置しています。AsyncTaskonProgressUpdate()AsyncTask
onPause()AsyncTask

理由(およびそれを防ぐ方法)を理解しようとしています

これにより、すべてのAsyncTaskUI 更新が停止します。その後、AsyncTask終了しActivityても、それ自体は再開しません。画面に触れるか、アクションバーボタンを押して、それを取得する必要がありますonResume()

編集:
これはlogcatです(Logcatアプリを使用して取得します)

< 新しい完全ログで更新予定 >

一時的 (ファイルチューザーの後の最初の onPause()):

06-12 22:08:48.744 11302 11302 D Viewer: + optionsItemSelected(itemID:2131296267)
06-12 22:08:48.754 11302 11302 D Viewer: + showFileChooser(path:/mnt/sdcard/Android/data/com.delphi.app/files, requestCode:0)
06-12 22:08:48.754 11302 11302 D Viewer: + onResume()
06-12 22:08:48.754 11302 11302 D Viewer: + onSaveInstanceState(outState:Bundle[{}])
06-12 22:08:48.754 11302 11302 D Viewer: + onPause()
06-12 22:08:48.754   189   443 I ActivityManager: START {act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras)} from pid 11302
06-12 22:08:48.764   189   489 D WindowManager: adjustConfigurationLw, config:{1.0 0mcc0mnc (no locale) layoutdir=0 sw800dp w800dp h1232dp xlrg port ?uimode ?night finger -keyb/v/h -nav/v} mLidOpen:-1 mHasDockFeature:true mHasHallSensorFeature:true config.hardKeyboardHidden:2
06-12 22:08:48.764 11302 11304 D dalvikvm: GC_CONCURRENT freed 244K, 5% free 6748K/7047K, paused 2ms+3ms

一時的 (2 番目の onPause() 、問題のあるもの):

06-12 22:09:00.324 11302 11350 I LoaderTask: Publishing message 13
06-12 22:09:00.324 11302 11350 I LoaderTask: Adding message 14
06-12 22:09:00.324 11302 11350 I LoaderTask: Publishing message 14
06-12 22:09:00.354 11302 11350 I LoaderTask: Adding message 15
06-12 22:09:00.354 11302 11302 D MessageTable: + onLayout(changed:false, l:0, t:0, r:800, b:20)
06-12 22:09:00.354 11302 11350 I LoaderTask: Publishing message 15
06-12 22:09:00.364 11302 11302 D MessageTable: + getColumns()
06-12 22:09:00.364 11302 11302 D MessageTable: + getRowCount()
06-12 22:09:00.364 11302 11302 D MessageTable: + getRowAt(index:-1)
06-12 22:09:00.364 11302 11302 D MessageRow: + getColumns()
06-12 22:09:00.364 11302 11302 D MessageTable: + setHeaderColumns(cols:[I@41125668)
06-12 22:09:00.364 11302 11302 D MessageRow: + setColumns(cols:[I@41125668)
06-12 22:09:00.364 11302 11302 D Viewer: + onSaveInstanceState(outState:Bundle[{}])
06-12 22:09:00.364 11302 11302 D Viewer: + onPause()
06-12 22:09:00.364 11302 11302 D LoaderTask: + getState()
06-12 22:09:00.364 11302 11302 D LoaderTask: + pause()
06-12 22:09:00.364   189   489 D WindowManager: adjustConfigurationLw, config:{1.0 0mcc0mnc (no locale) layoutdir=0 sw800dp w800dp h1232dp xlrg port ?uimode ?night finger -keyb/v/h -nav/v} mLidOpen:-1 mHasDockFeature:true mHasHallSensorFeature:true config.hardKeyboardHidden:2

アプリの構造、リクエストに応じて追加:

MainActivity
    Launch Viewer Activity on Button click

Viewer Activity
    Show layout, has a MessageTable (TableLayout)
    Launch ShowFileChosser  to choose a Records file
    Execute LoaderTask with given file

LoaderTask
    Open given file
    doInBackground()    
        Read one record
        Add the record to an ArrayList
        if not paused Publish record
    onProgressUpdate()
        Show record in MessageTable
4

2 に答える 2

1

私はついに、複数のonPause()呼び出しの原因が何であるかを見つけました。私の場合、ShowFileChooser()への複数の呼び出しがあります。

Chris Strattonが指摘したように、別のアクティビティに転送した後、onPause()があります。この場合は、ShowFileChooser()を呼び出した後です。
ファイルを選択している間(onStop()が呼び出されます)、Viewerアクティビティは停止され、その後、よく知られているアクティビティのライフサイクルに従って再起動されます。次に、ShowFilechooserが再度呼び出され、2番目の一時停止/停止が生成されます。

クリスのコメントが私に何が起こっているのかを理解するまで考え、再考するように導いたので、私はクリスに答えを与えています。

于 2012-07-11T14:15:37.073 に答える
1
06-12 18:21:09.394 9512 9512 D Viewer: + onStop()
06-12 18:21:14.684 9512 9512 D Viewer: + onActivityResult(requestCode:0, resultCode:-1, data:Intent { dat=file:///mnt/sdcard/Download/Records.11111.MyLog.gzip })

logcat をフィルタリングしたため、何が起こっているのかをすべて確認するのは困難ですが、この 5 秒間のギャップの間に別のアクティビティから何か (ファイル名?) を取得するためにインテントを使用しているようです。

別のアクティビティに転送するときはいつでも、onPause()-onResume() サイクルを予期する必要があります。

于 2012-06-12T15:47:44.237 に答える