将值从线程传递到主要活动

时间:2014-05-16 04:52:39

标签: android

我已经在网上搜索了很长时间。也许我在这里做的事情是错误的。

我在MainActivity.java的单独文件中编写了一个线程类。因为线程和主要活动都相对较长,所以我决定将它们分成不同的文件。

我想将线程类生成的一些值传递给主活动。最初我想使用处理程序。但是因为线程与主要活动属于不同的类。它不知道我在主要活动中定义的处理程序。

public class mythread implements Runnable{
    @Override
    public void run(){
        result = result_from_some_task();
    }
}

这是我的线程类的基本结构,我想将结果传递回主活动。我已经查看了很多示例,其中大多数是主要活动类中的线程,并且可以很容易地引用定义的处理程序。

意图似乎不适用。有没有人知道如何进行这样的操作?

提前致谢。

4 个答案:

答案 0 :(得分:5)

创建AnotherClass的参数化构造函数,当您创建AnotherClass的对象时,只需将MainActivity的对象传递到该构造函数中,并在AnotherClass类中调用MainActivity的方法,然后从该Object调用该方法。

检查以下代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AnotherClass object= new AnotherClass (this);
    object.start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void makeSomeCalculation() {
    //logic to change some UI 
}
}

并检查另一个班级:

public class AnotherClass extends Thread {

MainActivity mainActivity;

public AnotherClass (MainActivity mainActivity) {
    // TODO Auto-generated constructor stub

    this.mainActivity = mainActivity;
}

public void run() {
   //write other logic
        mainActivity.makeSomeCalculation();
   //write other logic
 }
}

答案 1 :(得分:0)

您的活动中需要一个处理程序。然后,当您的线程完成时,您会向处理程序发送一条消息,通知该线程执行已完成。例如,请参阅here。 你也可以使用接口。例如,请参阅here。作为回答,他使用接口从asyntask通知。你可以为线程做同样的事。

答案 2 :(得分:0)

这可能不是您正在寻找的,因此将其视为避免长期头痛的建议。尝试EventBus。这是一个可以在Android中各种组件之间轻松交流的库。

答案 3 :(得分:0)

您需要在runOnUiThread中运行活动功能。

mainActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        mainActivity.makeSomeCalculation();
    }
});