我试图在代码中创建一个带有postDelayed的线程,以便在一分钟后再次运行它。
当我第一次运行该应用程序时,它会进入线程,但一分钟后不会运行。 当我第一次运行该应用程序时,转到另一个屏幕并返回,该线程再次被执行,这次postDelayed正在工作。 有人可以帮我吗?我已经有一个星期了这个问题,我不知道该怎么办。
代码->
第一次调用线程的地方
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
Log.d(TAG, "onCreateView");
super.onCreateView(inflater, container, savedInstanceState);
setHasOptionsMenu(true);
getActivity().setTitle(getResources().getString(R.string.map_title));
if (null == handler) {
handler = new Handler();
}
Log.d("MAPS**", "OnCreate View Inicialize stations thread");
handler.removeCallbacks(updateStations);
handler.post(updateStations);
return mapView;
}
其中的线程称为切换屏幕并返回到线程屏幕
@Override
public void onResume() {
super.onResume();
if (null != handler) {
handler.removeCallbacksAndMessages(null);
handler.removeCallbacks(updateStations);
handler.post(updateStations);
} else {
handler = new Handler();
}
}
线程代码->我知道代码已通过了postDelayed,因为我已经调试了它,并且显示了以前的日志,但是为什么一分钟后又不执行该线程呢?
public Runnable updateStations = new Runnable() {
@Override
public void run() {
Thread thread = new Thread() {
@Override
public void run() {
super.run();
//******Some code***Log.d("---MAPS", " PostDelayed");
thread.start();
handler.postDelayed(updateStations, 60000);//define time how often the thread runs
}
};
答案 0 :(得分:1)
似乎您忘记了创建新线程后调用thread.start()
。
答案 1 :(得分:1)
您不需要在Runnable上创建线程,也无需启动线程。使用thread.start()。