对于以下示例代码,它尝试从非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
答案 0 :(得分:0)
类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,解释了其中的区别。