我已经在网上搜索了很长时间。也许我在这里做的事情是错误的。
我在MainActivity.java的单独文件中编写了一个线程类。因为线程和主要活动都相对较长,所以我决定将它们分成不同的文件。
我想将线程类生成的一些值传递给主活动。最初我想使用处理程序。但是因为线程与主要活动属于不同的类。它不知道我在主要活动中定义的处理程序。
public class mythread implements Runnable{
@Override
public void run(){
result = result_from_some_task();
}
}
这是我的线程类的基本结构,我想将结果传递回主活动。我已经查看了很多示例,其中大多数是主要活动类中的线程,并且可以很容易地引用定义的处理程序。
意图似乎不适用。有没有人知道如何进行这样的操作?
提前致谢。
答案 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();
}
});