Android UI线程如何工作?

时间:2014-09-25 16:50:41

标签: android multithreading user-interface android-asynctask

我是Android Devloping的初学者,我在Android中遇到了用户界面的问题

我的代码看起来像这样:

public class MainActivity extends Activity{
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv1 = (TextView) findViewById(R.id.textView1);
        TextView tv2 = (TextView) findViewById(R.id.textView2);

        tv1.setVisibility(View.GONE);
        tv2.setVisibility(View.GONE);

        String s="abc";
        MyAsyncTask BkGroundTask = new MyAsyncTask(); 
        BkGroundTask.execute(s);
        try {
            s = BkGroundTask.get();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();}

        tv1.setVisibility(View.VISIBLE);
        tv2.setVisibility(View.VISIBLE);

    }
}

但是当AsyncTask运行时,tv1和tv2不会消失。 我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

这已经多次讨论了,但我会再次解释你想要什么,因为你想要一个特殊的场景......

几乎从未想要使用.get(),因为它是阻止通话。这意味着它将锁定您的UI,直到任务完成。 .execute(),就像你所拥有的那样,是你想要的。

如果您希望它们在任务运行时消失并在任务完成后再次可见,那么您希望将代码放在onPostExecute()内,如果它是内部类,如果不是然后你可以使用来自Activity的{​​{1}}回调并在回调方法中显示它们。

This answer discusses how to use an interface with your AsyncTask

Related Post

答案 1 :(得分:0)

asynctask是异步执行的,你假设当你调用execute这是错误的并且会破坏asynctask的目的时,一切都会暂停。实际上它正在消失,但随后再次出现。它发生得如此之快,以至于你甚至无法注意到它。

如果你想在任务完成时显示textview,你需要在任务的onpostexecute中执行此操作

例如

@Override
public void onPostExecute(Void void){
    tv1.setVisibility(View.VISIBLE);
    tv2.setVisibility(View.VISIBLE);
}