Java 异步任务不是';t异步?

Java 异步任务不是';t异步?,java,android,user-interface,android-asynctask,Java,Android,User Interface,Android Asynctask,不知何故,在任务完成之前,我无法使用GUI。我不知道在“onCreate”或“onCreateOptions菜单”方法中发布execute()有什么区别。 你知道怎么了吗? 谢谢你的帮助 package com.test11; import java.util.concurrent.ExecutionException; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; im

不知何故,在任务完成之前,我无法使用GUI。我不知道在“onCreate”或“onCreateOptions菜单”方法中发布execute()有什么区别。 你知道怎么了吗? 谢谢你的帮助

package com.test11;

import java.util.concurrent.ExecutionException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;

public class TestActitivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_actitivity);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_test_actitivity, menu);

        try
        {
            int t = new TestTask().execute().get();
        }

        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        catch (ExecutionException e)
        {
            e.printStackTrace();
        }

        return true;
    }

    class TestTask extends AsyncTask<Void, Void, Integer>
    {
        public Integer doInBackground(Void...voids)
        {
            try
            {
                Thread.sleep(10000);
            }

            catch(Exception e)
            {
                e.printStackTrace();
            }

            return 1;
        }
    }
}
package com.test11;
导入java.util.concurrent.ExecutionException;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.support.v4.app.NavUtils;
公共类测试性扩展了活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u test\u activity);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u test\u activity,menu);
尝试
{
int t=newtesttask().execute().get();
}
捕捉(中断异常e)
{
e、 printStackTrace();
}
捕获(执行例外)
{
e、 printStackTrace();
}
返回true;
}
类TestTask扩展了AsyncTask
{
公共整数doInBackground(Void…voids)
{
尝试
{
睡眠(10000);
}
捕获(例外e)
{
e、 printStackTrace();
}
返回1;
}
}
}
阅读以下文件:

如有必要,等待计算完成,然后检索其结果


您几乎不需要在
AsyncTask
上调用该方法。只需调用
execute

即可执行任务,如下所示:

new TestTask().execute().get();
@Override
public void onPostExecute(Integer result) {
    TextView tv = (TextView) findViewById(R.id.sampletext);
    tv.setText("Result was " + result);
}
你到底在这里干什么?您将创建一个新的任务实例。然后你来运行它。然后对任务调用
get()
,返回其值。这意味着
onCreate()
oncreateoptions菜单()
将被阻止,直到第二个线程完成。如果删除
get()
,则任务不会阻止UI

如果要处理结果,应该在AsyncTask中重写,而不是使用
get()
onPostExecute()
在UI线程中运行,允许您使用结果轻松操作UI。例如,如果要在textview中显示结果,可以使用如下实现:

new TestTask().execute().get();
@Override
public void onPostExecute(Integer result) {
    TextView tv = (TextView) findViewById(R.id.sampletext);
    tv.setText("Result was " + result);
}

首先,将
TestTask
设置为一个
公共静态类
或将其移出到自己的
。Thx这就是问题所在,但现在如何获得异步任务的返回?您可以根据中的结果进行任何处理