我正在开发一个小应用程序,它读取特定的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)