Java 如何从另一个活动中启动的线程更新活动?

Java 如何从另一个活动中启动的线程更新活动?,java,android,Java,Android,我有一个主活动,点击按钮后我启动线程(但线程隐藏在库中,我在主活动中只有回调)。 现在,我想开始另一个活动(调用A),我想把线程的结果放在这里。 以下是简化代码: public class Main extends Activity { XManager.ResultsCallback xResultsCallback = new XManager.ResultsCallback() { // the method is called every 10 sec.

我有一个主活动,点击按钮后我启动线程(但线程隐藏在库中,我在主活动中只有回调)。 现在,我想开始另一个活动(调用A),我想把线程的结果放在这里。 以下是简化代码:

public class Main extends Activity {


    XManager.ResultsCallback xResultsCallback = new XManager.ResultsCallback() {

// the method is called every 10 sec. 
        @Override
        public void onResult(ArrayList<String> texts) {


        }
    };

    XManager xManager = new xManager(xResultsCallback);
    View.OnClickListener onClick = new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            XManager.start();

            Intent i = new Intent(Main.this, A.class);
            startActivity(i);

        }
    };


}
public类主扩展活动{
XManager.ResultsCallback xResultsCallback=新的XManager.ResultsCallback(){
//该方法每10秒调用一次。
@凌驾
public void onResult(数组列表文本){
}
};
XManager XManager=新的XManager(xResultsCallback);
View.OnClickListener onClick=new View.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
XManager.start();
意向i=新意向(Main.this,A.class);
星触觉(i);
}
};
}

每次调用onResult()方法时,我都要更新活动的内容。如何做到这一点?

使用LocalBroadcastManager

在您的活动创建功能中:

private void sendResult() {
  Log.d("sender", "Broadcasting message");
  Intent intent = new Intent("custom-event-name");
  // You can also include some extra data.
  intent.putExtra("message", "This is my result!");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
并在活动中添加BroadcastReceiver

private BroadcastReceiver onResult= new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("jazzy","onReceive called");

    }
};
在创建时添加OnCreate

@Override
public void onCreate(Bundle savedInstanceState) {

  // Register to receive messages.
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("custom-event-name"));
}
添加onDestroy

@Override
protected void onDestroy() {
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
  super.onDestroy();
}

我有一个建议,你应该这样做:

  • 单击按钮启动
    活动A
  • 在活动A中,声明
    XManager
    实例,并在
    A
    本身中存在回调
  • 然后以
    XManager.start();
    的方式启动
    XManager
    ,这样您就可以在所需的活动中获得所有回调

  • 祝你度过愉快的一天!

    我认为如果你想解耦逻辑,除了可以使用Android BroadcastReceiver外,另一个灵活的选择是使用

    您可以轻松地将其与gradle集成

    dependencies {
      compile 'com.squareup:otto:+'
    }
    

    谢谢。我找到了,但它是从支持库中找到的。有“正常”的解决方案吗?让你的XManager成为Singleton类,并从你想要的任何地方调用他。此外,在每个活动中,你都可以注册一个回调以获得所需的结果,比如:XManager.getInstance().addCallback(new callback(){..})在xManager内部创建一个列表;private void addCallback(Callback Callback){List.add(Callback)}并在线程完成工作时调用所有回调。private void callAll(){for(Callback:Callback:List)Callback.call(…params…)