在我的Android应用程序中,我使用选项卡视图,因此我有两个选项卡:参数和结果。
用户在第一个选项卡上输入各种参数,然后切换到第二个选项卡以查看结果。
我有一项服务可以执行一些长时间运行的计算。用户在第一个选项卡上输入参数并点击“计算”。他们可以进行调整并点击“重新计算”,并使用新参数更新服务。
随着这些计算的进展,我希望用户能够切换到结果选项卡以查看最新计算的结果。然后,他们将查看结果,并能够切换回参数选项卡进行调整。
我可以想到两种方法:
- 使用服务注册“结果标签”,当服务到达里程碑时,它会直接调用“结果标签”。
- 在“结果选项卡”中运行一个计时器,让它定期查询绑定服务并进行相应更新。
人们对这两种方法有意见或建议吗?
答案 0 :(得分:1)
AsyncTask有一个publishProgress方法,可以让你将后台任务的更新推送到UI线程真的很轻松。
答案 1 :(得分:0)
使用广播接收器
public class Detail extends GDActivity {
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(DownloadService.CUSTOM_INTENT)) {
mProgressDialog.setProgress(intent.getFlags());
}
}
};
// Flag if receiver is registered
private boolean mReceiversRegistered = false;
// Define a handler and a broadcast receiver
private final Handler mHandler = new Handler();
@Override
protected void onResume() {
super.onResume();
// Register Sync Recievers
IntentFilter intentToReceiveFilter = new IntentFilter();
intentToReceiveFilter.addAction(DownloadService.CUSTOM_INTENT);
this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
mReceiversRegistered = true;
}
@Override
public void onPause() {
super.onPause();
// Make sure you unregister your receivers when you pause your activity
if(mReceiversRegistered) {
unregisterReceiver(mIntentReceiver);
mReceiversRegistered = false;
}
}
}
}
和发件人
@Override
protected void onProgressUpdate(Integer... progress) {
Intent i = new Intent();
i.setAction(CUSTOM_INTENT);
i.setFlags(progress[0]);
ctx.sendBroadcast(i);
}