运行处理程序的问题?

时间:2018-01-04 08:40:19

标签: java android multithreading debugging handler

我试图在每1分钟后调用我的takepicture()方法。所以,我尝试使用处理程序类,然后尝试在其run函数中调用我的方法。但是,当我尝试进行逐步调试时,它根本不会进入run方法。任何人都可以建议我做错了什么?我试图从我的片段中调用它。

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mFile = new File(getActivity().getExternalFilesDir(null), "pic.jpg");
        final Handler handler = new Handler();

        final Runnable r = new Runnable() {
            public void run() {
                Log.d("HandlerThread","This is from the HandlerThread");
            takePicture();
            handler.postDelayed(this, 60000);
            }
        };


    }

3 个答案:

答案 0 :(得分:2)

您永远不会调用任何运行Runnable的方法。您只在run()函数中指定了它的行为。

要启动Runnable,请调用handler.postDelayed(r, 0);

之类的内容

只是一个信息:请注意,您的Handler仍然与主Thread相关联。如果您想在单独的主题上运行,请参阅this answer和this one

答案 1 :(得分:2)

试试这个:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mFile = new File(getActivity().getExternalFilesDir(null), "pic.jpg");
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        public void run() {
            Log.d("HandlerThread","This is from the HandlerThread");
        takePicture();
        }
    }, 60000);
}

而不是在run方法中定义handler.postDelayed。我刚刚更改了主线程中的调用。

如果它能解决您的问题,请将其标记为答案。

答案 2 :(得分:0)

您应该初始调用以启动处理程序功能。 即,handler.post(r);