Android方法onCreate()中的线程仍然会在10%的情况下停止UiThread

时间:2010-10-13 14:33:59

标签: android multithreading ui-thread

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

在一个案例中,我看到在300毫秒后调用Log.v("Time...),但屏幕保持黑色约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));

      }

2 个答案:

答案 0 :(得分:0)

AsyncTask在这里没有什么区别。

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

答案 1 :(得分:0)

问题是我在“initializeWidgets”中使用了谷歌地理反向编码功能(GeoCoder),后者从网上下载了数据。 90%的案例真的很快。现在,在将下载移动到AsyncTask

之后,再次出现这种延迟