setContentView和AsyncTask

时间:2013-10-26 20:30:13

标签: android android-asynctask

我的Android MainActivity及其setContentView。视图是黑/蓝渐变背景和ImageView。这是我的onCreate

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /**
        * Activity elements
        * */
        ImageView rt_logo = (ImageView) findViewById(R.id.rt_logo);

        /**
        * Activity variables
        * */
        HttpGetRequest httpGetRequest = new HttpGetRequest(rt_logo);

        try {
        URI uri = new URI("http://www.myurl.com");
        URI[] uris = {uri};

        response = httpGetRequest.execute(uris).get();
    [...]   
    } 

要检索页面代码,我会AsyncTask。对于调试,我使用睡眠5秒钟。

ImageView rt_logo;

public HttpGetRequest(ImageView _rt_logo) {
    rt_logo = _rt_logo;
}

@Override
protected String doInBackground(URI... uris) {

HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(uris[0]);


[...]

SystemClock.sleep(5000);
getString = stringBuffer.toString();

return getString;
}

我的问题是,在黑色/蓝色渐变和徽标显示之前我得到一个白色屏幕5秒,我想在AsyncTask之后。

为什么我不能在应用启动时获得它?

感谢。

3 个答案:

答案 0 :(得分:0)

目前尚不清楚你正在尝试用睡眠做什么()。但是,既然你已经在'AsyncTask'的doInBackground方法中提到它,那么只有在Async任务启动后才会执行它。如果您想在启动应用程序时遇到延迟,您可能应该在AsyncTask之外的onCreate()方法中编写延迟。

答案 1 :(得分:0)

像Siddharth一样,我也对你想要做的事感到困惑。你正在做的事情并非完全错误,这基本上是启动线程,等待5秒,然后从你的Http请求中获取信息。这不应该导致背景不出现。但我确实怀疑;这一行:

response = httpGetRequest.execute(uris).get();

您期待结果。由于它是一个单独的线程,你可能没有想到的反应。实际上它甚至可能是空的(直到我看到所有代码才会知道)。无论如何,我会检查,因为如果你正在做一些可能导致响应延迟的事情。很高兴看到onCreate的其余内容。

答案 2 :(得分:0)

我找到了一种执行AsyncTask onCreate()的方法,但仍然有我的内容。

正如Andy所说,MainActivity不能指望来自AsyncTask的价值,否则它会在显示内容之前等待。所以在onCreate中,将参数中的活动提供给AsyncTask并执行它。

HttpGetRequest httpGetRequest = new HttpGetRequest(MainActivity.this);

    try {
        URI uri = new URI("http://www.domain.com/live.html");
        URI[] uris = {uri};

        httpGetRequest.execute(uris);

    } catch (URISyntaxException e) {
        Log.e(TAG, "Wrong URI syntax : " + e.getMessage()); 
        e.printStackTrace();
    }

然后,在AsyncTask中,创建一个onPostExecute方法。在其中,完成MainActivity并调用另一个。如果您希望用户看不到它,请在活动开始时禁用动画。

Activity activity;

public HttpGetRequest(Activity activity) {
    this.activity = activity;
}

public void onPostExecute(String response) {

    Bundle bundle = new Bundle();
    bundle.putString("response", response);

    Intent intent = new Intent(this.activity, LiveActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    intent.putExtras(bundle);

    this.activity.startActivity(intent);

}

向您的新活动发送AsyncTask响应,就是这样!