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

标签 android multithreading ui-thread

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

在一个案例中,我看到 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));

      }

最佳答案

AsyncTask 在这里没有什么不同。

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

关于android - Android 方法 onCreate() 中的线程在 10% 的情况下仍会停止 UiThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924802/

相关文章:

android - 在 AsyncTask 中启动 Activity 时内存泄漏(由 Thread 更改)

Android 使用自定义 View 多次 inflatedView

java - Appium:找不到可见的元素

android - onperformsync 和多线程

c# - 防止 Windows 服务中定时器的 Elapsed 事件在一个周期完成之前触发的最佳方法

scala - Scala Actor 的线程监控

android - 如何在 Swift 中将 protobuf 对象转换为 ByteArray 并使用 Base64 URL_SAFE 进行编码?

winforms - 具有启动、暂停和停止事件处理的动态线程

wpf - 在长时间运行的操作之前强制重绘

java - 定位不在平台/调度线程上的 UI 代码