繁体   English   中英

Android:如何等到Timer和Timertask完成UI线程的工作

[英]Android : How to wait until Timer and Timertask finish their work on UI Thread

我有一个片段。 在这个片段中,我有一个定期运行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 Exception因为TimerTask不能再访问UI Thread(因为我使用了runOnUIThread

所以,我的问题是:在我可以更改片段之前,如何确保Timer和TimerTask停止其所有工作。

谢谢 :)

只需切换显示的片段,您的片段就不会进入后台。 它的生命周期取决于Activity。 我想如果你添加Log.d("yourFragment", "onPause()"); 对于onPause()方法,你会发现这是真的。

片段生命周期可以在这里找到:

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

请注意,它表示删除/替换片段的时间,但是如果您只是显示活动中不计数的另一个片段;)

似乎onHiddenChanged(布尔隐藏)就是你所需要的。 Fragment onPause()文档:

这通常与Activity.onPause相关,包含Activity的生命周期。

因此,当片段不再可见时,不一定要调用onPause() 将计时器取消代码移动到onHiddenChanged()

把你的timer .cancle作为上面的声明:

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


Declare private Timer timer; at class level

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM