Android 8中的哪些更改可以从非UI线程更新UI

时间:2018-09-07 22:49:10

标签: android ui-thread

对于以下示例代码,它尝试从非UI线程更新UI,这在Android 4.x上崩溃,但在Android 8上运行良好(这让我感到惊讶!)。

    count = 0
    for identifier in identifiers:
        if count==10:
             action()
             count = 0
        count +=1
        result = sh.download(identifier, args.output)
        if 'err' in result:
            logger.debug('%s', result['err'])
        else:
            logger.debug('Successfully downloaded file with identifier %s', identifier)

}

想知道Android 8上的哪些更改使它可行。

编辑:Android 4崩溃的堆栈跟踪: else

1 个答案:

答案 0 :(得分:0)

自API级别1起,

Thread没有发生变化。

只是尝试,而Thread.currentThread().getName()在使用main时给了我线程.run()或在使用Thread-2时给了我.start();而两者似乎都不是后台线程。

一个人可以使用Looper.myLooper() == Looper.getMainLooper()来验证...

或使用Looper.getMainLooper().getThread() == Thread.currentThread()

new Thread() {
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if(Looper.myLooper() == Looper.getMainLooper()) {
            mTextView.setText(Thread.currentThread().getName());
        } else {
            Log.w(LOG_TAG, "not the main thread");
        }
    }
}.run();

请只看Processes and Threads,它解释了为什么它起作用...

尽管它将阻塞main线程一秒钟。

那么为什么它在Android 4.0上崩溃,那里的线程名称是什么?

我刚刚找到了video,解释了其中的区别。