如何在OnClick方法中处理我的Looper以运行具有延迟的函数?

时间:2016-11-08 18:26:27

标签: android handler looper

我希望能够在点击事件中通过looper在后台运行我的特定方法,这是正确的方法吗?

myThread = new LooperThread();
    myThread.start();
    upload.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myThread.handler.post(new Runnable() {
                @Override
                public void run() {
                    //my methods
                }
            });
        }
    });

我的Looper课程:

class LooperThread extends Thread {
    Handler handler;
    public void run() {
        Looper.prepare();
        handler = new Handler();
        Looper.loop();
    }
}

如果是, 问题是,通过这种方式,我不明白为什么系统在输入时不识别“处理程序”:“myThread.handler.post ..”并运行方法。

否则,你可以帮我做这件事吗?

如果我在提出问题时犯了错误,我很抱歉,但这是我第一次来这里:)``

1 个答案:

答案 0 :(得分:0)

欢迎使用Stack Overflow。

  

我希望能够在点击事件中通过looper在后台运行我的特定方法,这是正确的方法吗?

您的代码有效,但我不能说这是正确的方式。就像@tynn提到的那样,HandlerThread可能是更好的选择。

  

如果是,问题就是这样,我不明白为什么系统在输入时不识别“处理程序”:“myThread.handler.post ..”并运行方法。

     

否则,你可以帮我做这件事吗?

如果我理解你的问题,这是一个访问问题。你的处理程序似乎无法访问,因为它被声明为package-private。你可以这样看待你的处理程序:

// Should this class be public or package-private?
public class LooperThread extends Thread {

    private Handler handler;

    public Handler getHandler() {
        return handler;
    }

    // ...
}

你将能够像这样引用处理程序:

myThread.getHandler().post(...);

更新

您可以通过这种方式延迟Runnable执行:

// Delay execution of a Runnable task by 5000 milliseconds.
myThread.getHandler().postDelayed(myDelayedRunnable, 5000);