相关疑难解决方法(0)

AsyncTask,它必须采取这样的性能惩罚......?

我正在开发一个小应用程序,它读取特定的html页面,重新格式化它们,然后在WebView中显示它们.如果我在GUI线程中运行我的代码,与简单地让WebView显示原始html页面相比,性能命中几乎可以忽略不计.但是,如果我是一个好孩子并且像我被告知的那样,我应该使用AsyncTask在后台运行代码,以免在我的代码完成工作的3-5秒内冻结GUI .问题是......如果我这样做,代码需要花费10倍以上的时间才能完成.页面需要60秒以上才能显示,这是不可接受的.

跟踪问题,TraceView向我显示我的AsyncTask(默认优先级)以大约10毫秒的块运行,大约每秒4次.我需要将我的线程优先级设置为MAX_PRIORITY以接近可接受的加载时间,但即使这样,它也比我在GUI线程中运行时长3-4倍.

我做错了什么,或者这只是它的工作方式?它必须以这种方式工作......?

这是可请求的可编译代码:

package my.ownpackage.athome;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class AndroidTestActivity extends Activity
{   
    WebView webview;
    //...

    private class HelloWebViewClient extends WebViewClient 
    {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
        {
            AndroidTestActivity.this.fetch(view, url);
            return true;
        }
    }

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // To allow to connect to the web and pull down html-files, reset strict mode
        // see http://stackoverflow.com/questions/8706464/defaulthttpclient-to-androidhttpclient
        if (android.os.Build.VERSION.SDK_INT > 9) 
        {
            StrictMode.ThreadPolicy policy …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

29
推荐指数
2
解决办法
2万
查看次数

标签 统计

android ×1

android-asynctask ×1