Android线程postDelayed无法正常工作

时间:2018-12-19 18:13:27

标签: android multithreading thread-safety

我试图在代码中创建一个带有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
    }
};

2 个答案:

答案 0 :(得分:1)

似乎您忘记了创建新线程后调用thread.start()

答案 1 :(得分:1)

您不需要在Runnable上创建线程,也无需启动线程。使用thread.start()。