Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:将参数传递给线程_Java_Android_Multithreading_Methods_Parameters - Fatal编程技术网

Java Android:将参数传递给线程

Java Android:将参数传递给线程,java,android,multithreading,methods,parameters,Java,Android,Multithreading,Methods,Parameters,我正在努力学习Android编程,目前为止还不错。现在我正试图学习一些关于线程的知识,但我无法让我的代码正常工作 我已经读过了 我尝试使用这两种方法来让我的代码工作,但我不知道如何做到这一点,因为它们都不符合我的需要,而且都使用了相同的进度条示例 我有3个按钮在我的布局,我想(慢慢地)向上或向下移动。我想用一个线程来实现这一点,因为在执行此操作时,mainUI活动不应该停止工作。 所以我的想法是启动一个新线程,在那里我等待一段时间,然后设置参数,我一次又一次地这样做 我可能可以用全局变量来解

我正在努力学习Android编程,目前为止还不错。现在我正试图学习一些关于线程的知识,但我无法让我的代码正常工作

我已经读过了

我尝试使用这两种方法来让我的代码工作,但我不知道如何做到这一点,因为它们都不符合我的需要,而且都使用了相同的进度条示例

我有3个按钮在我的布局,我想(慢慢地)向上或向下移动。我想用一个线程来实现这一点,因为在执行此操作时,mainUI活动不应该停止工作。 所以我的想法是启动一个新线程,在那里我等待一段时间,然后设置参数,我一次又一次地这样做

我可能可以用全局变量来解决这个问题,但我不想用这种“便宜”的技巧来解决类似的问题

我的代码看起来是这样的(大部分都是从两面复制的,因为我找不到一个线程的工作示例,其中参数是给方法的)

公共类MainActivity扩展活动{
//需要回调到UI线程的处理程序
最终处理程序mHandler=新处理程序();
//创建可运行的过帐
最终可运行mUpdateResults=新可运行(){
公开募捐{
updateResultsInUi();
}
};
受保护的无效移动菜单(整数方向,最终整数时间){
//启动一个线程来做一些我们不应该直接在UI线程中做的工作
线程t=新线程(){
公开募捐{
对于(int i=0;i<10;i++){
doSomethingExpensive(时间);

mHandler.post(mUpdateResults);//在移动中创建一个新的runnable:

    Thread t = new Thread() {
        public void run() {
            for (int i = 0; i < 10; i++) {
                doSomethingExpensive(time);
                final int finalI = i;
                mHandler.post(new Runnable() {
                    public void run() {
                        updateResultsInUi(finalI);
                    }
                });
            }
        }
    };
    t.start();
Thread t=新线程(){
公开募捐{
对于(int i=0;i<10;i++){
doSomethingExpensive(时间);
最终int finalI=i;
mHandler.post(新Runnable(){
公开募捐{
更新结果界面(最终);
}
});
}
}
};
t、 start();

如果要将值传递给线程。我遵循的方法是:

创建一个新类,该类将扩展
runnable

public interface myRunnable extends Runnable {

  public void setParams(int param1, int param2);
 }
现在实现这个类

public class ImplementMyRunnable implements myRunnable{
int param1;
int param2;
  public void setParams(int param1, int param2){
     this.param1 = param1;
     this.param2 = param2;
  }

 public void run(){
    //your code here and use as many parameters you want
 }
}
现在在您的移动菜单功能

protected void moveMenu(int direction, final int time) {
   ImplementMyRunnable object1 = new ImplementMyRunnable();
   object1.setParams(1,12);
   Thread myThread = new Thread(object1);
   myThread.start();
}
基本上,我想在这里指出的是。创建一个新类,扩展
Runnable
类,并添加您现在需要或将来可能需要的任何功能。在
构造函数
或任何其他setter函数中传递任意数量的参数

这是一种更简洁的方法,它将帮助您在将来更轻松、更干净地扩展代码


代码语法可能是错误的。我只想分享这种方法。希望它能有所帮助。

经过一些修改,我使它在我所有的Runnable上都能工作。谢谢你的代码
protected void moveMenu(int direction, final int time) {
   ImplementMyRunnable object1 = new ImplementMyRunnable();
   object1.setParams(1,12);
   Thread myThread = new Thread(object1);
   myThread.start();
}