开始新的Android Activity是如此之慢

我想打开一个新的Activity:

Intent intent = new Intent(homeScreen.this,EmployeeService.class);         
Bundle b = new Bundle();
b.putInt(Constants.SERVICE_DETAIL_L1_ID_MSG,ServiceIndex.SRV_L1_EMPLOYMENT);
b.putInt(Constants.SERVICE_DETAIL_FOCUS_POS_MSG,2);
intent.putExtras(b);
startActivity(intent);

但是,目标Activity(EmployeeService)变得可见需要很长时间.从Logcat,我看到:

05-14 23:43:31.727: INFO/ActivityManager(59): displayed activity fr.playsoft.happylille/.employee.EmployeeService: 7050 ms (total 7050 ms)

我不敢相信仅仅打开一个新的活动需要7秒多.我在onCreate()中添加一个日志,但是看到它只需要5ms来完成onCreate.

谁能告诉我如何找到这个问题的根源?

最佳答案
你应该移动代码Html.fromHtml(desc);一个线程让它异步.在新打开的Activity的onCreate()期间可以安全地启动该线程.

在该线程的末尾,您可以从UI线程运行tvDesc.setText():

class ExampleThread extends Thread {
    @Override
    public void run() {
         final Spanned spannedText = Html.fromHtml(desc);

         yourNewlyOpenedActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    tvDesc.setText(spannedText);
                }
         });
    }
}

更一般地说,设备上的7秒可能意味着另一个上的20秒,所以beware the ANR

(在下面的Boy评论中进一步编辑,此答案的前一版本不再准确/有效)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...