我在实现异步任务时遇到了一些问题。我想在一个活动中运行一个后台任务一段时间(15分钟,但出于调试目的,我使用10秒)。
我的代码:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
ApplicationData.LoadApplicationData(getApplicationContext()); //Like SystemClock.sleep(2000)
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
}
try{
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragmentcontent);
if(currentFragment != null) {
FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
fragTransaction.detach(currentFragment);
fragTransaction.attach(currentFragment);
fragTransaction.commit();
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
}
catch (Exception e) {
}
finally{
handler.postDelayed(this, 10000); //900000
}
}
},10000);
此代码冻结应用程序2-4秒。 ApplicationData.LoadApplicationData从服务器加载数据并花费该时间。在我的第一次尝试中,我创建了一个线程,所以这项工作是异步完成的,但后来我无法更新我的片段。
如果更新了GUI,我怎样才能更新后台数据?
答案 0 :(得分:0)
new Thread(new Runnable() {
@Override
public void run() {
ApplicationData.LoadApplicationData(getApplicationContext());//background thread code
runOnUiThread(new Runnable() {
public void run() {
//the other foreground thread
}
});
}
}).start();