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