0

私は断片を持っています。このフラグメントには、timertask を定期的に実行する Timer があります。onPauseフラグメントを切り替えると、TimerTask とタイマーが動作を停止するようにオーバーライドします。

@Override
        public void onPause() {
            super.onPause();
            timerTask.cancel();
            timer.cancel();
            timer.purge();
        }

そして、フラグメントを切り替えるための私のコードは次のとおりです。

OrderFragment fragment2 = new OrderFragment();
                    fragment2.setArguments(arguments);
                    getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment2).commit();

しかし、別のフラグメントを切り替えると、Null Point ExceptionTimerTask が UI Thread にアクセスできなくなったため、よく受信します (使用したためrunOnUIThread) 。

だから、私の質問は次のとおりです。フラグメントを変更する前に、Timer と TimerTask がすべての作業を確実に停止する方法。

ありがとう :)

4

3 に答える 3

1

表示されているフラグメントを切り替えるだけでは、フラグメントがバックグラウンドに移行しない場合があります。そのライフサイクルはアクティビティに依存しています。Log.d("yourFragment", "onPause()");onPause() メソッドに追加すると、これが真であることがわかると思います。

フラグメントのライフサイクルは次の場所にあります。

http://developer.android.com/guide/components/fragments.html

フラグメントが削除/置換されたときに表示されますが、アクティビティから別のフラグメントを表示しているだけの場合はカウントされないことに注意してください;)

于 2013-04-05T02:20:54.600 に答える