处理程序冻结 GUI Android
Handler freezing GUI Android
我在执行异步任务时遇到了一些问题。我想在 activity 中有一个后台任务 运行 一段时间(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?
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();
我在执行异步任务时遇到了一些问题。我想在 activity 中有一个后台任务 运行 一段时间(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?
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();