处理程序冻结GUI Android

时间:2017-04-17 11:17:25

标签: android asynchronous android-handler

我在实现异步任务时遇到了一些问题。我想在一个活动中运行一个后台任务一段时间(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,我怎样才能更新后台数据?

1 个答案:

答案 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();