2

这是我的应用程序的第一个活动的 onCreate 方法。它初始化所有小部件,然后启动一个线程以从互联网加载模型数据。在某些情况下,当网络真的很慢或没有响应时,"initializeModelThread"似乎占用了整个 CPU 并且不允许 onCreate Methode 完成。

在一种情况下,我看到它Log.v("Time...)在 300 毫秒后被调用,但屏幕保持黑色大约 20 秒,直到 HttpException 停止了initalizeModelThread. 您已经可以看到我将线程的优先级设置为低。

在这种情况下使用 AsyncTask 会有所帮助吗?你对这个问题还有其他想法吗?

public void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);

        Long time = System.currentTimeMillis();

        initializeWidgets();

        Thread threadInstance = new Thread(initializeModelThread);
        threadInstance.setPriority(Thread.MIN_PRIORITY);
        threadInstance.start();

        Log.v("Time", "Difference from start " + Long.toString(System.currentTimeMillis() - time));

      }
4

2 回答 2

0

问题是我在“initializeWidgets”中使用了谷歌地理反向编码功能(GeoCoder),它从网上下载了数据。在 90% 的情况下,它真的很快。现在,在将该下载移动到 AsyncTask 后开始时再也没有这样的延迟了

于 2010-11-05T21:57:27.797 回答
0

AsyncTask在这里不会有什么不同。

不要在方法上创建线程,而是在onCreate()方法上执行onStart()

于 2010-10-13T14:38:00.317 回答