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