默认情况下,Android是否支持多线程而无需手动开启?

3

我构建了一个应用程序,可以逐像素地重新着色位图,而不使用shader,只使用CPU。它对我来说足够快,但我想知道CPU是否默认使用多线程,而实际上没有在编程中使用。


请提供您的代码,谢谢! :) - Josef E.
哦,我只是在问自己,是否可能,而不是为了解决任何问题。这段代码是一个非常特定的实现。你想要那段代码吗? - csnewb
哦不,不过还是谢谢您! :P 我只是好奇你是否调用了任何可以自行创建线程的对象。:D - Josef E.
目前还没有涉及到线程:D - csnewb
1个回答

4

来自文档


默认情况下,您的应用程序启动一个执行线程(称为“main”)。这个线程非常重要,因为它负责将事件分派给适当的用户界面小部件,包括绘图事件。它也是您的应用程序与Android UI工具包组件(来自android.widget和android.view包的组件)交互的线程。因此,主线程有时也称为UI线程。

线程与CPU的关系(多线程示例):


多线程程序的这种优势使其在具有多个或多核CPU的计算机系统上运行得更快,或者跨越一组机器,因为程序的线程自然地倾向于真正并发执行。在这种情况下,程序员必须小心避免竞争条件和其他非直观的行为。为了正确操作数据,线程通常需要在时间上会合,以便按正确顺序处理数据。线程还可能需要互斥操作(通常使用信号量实现),以防止在修改或读取正在被修改的公共数据时同时进行。对这些原语的粗心使用可能导致死锁。

多线程的另一个用途,即使对于单CPU系统也适用,就是应用程序能够保持对输入的响应。在单线程程序中,如果主执行线程阻塞在长时间运行的任务上,整个应用程序可能会出现冻结。通过将这些长时间运行的任务移动到与主执行线程并发运行的工作线程中,可以使应用程序在执行后台任务的同时保持对用户输入的响应。另一方面,在大多数情况下,多线程不是保持程序响应的唯一方法,非阻塞I/O和/或Unix信号可用于获得类似的结果。

简言之,除非您明确告诉它,否则您的程序不会进行多线程操作。在Android的情况下,与UIThread(main)交互时,AsyncTask是要走的路线。


谢谢,这就是我在寻找的。 - csnewb
没问题 :) @csnewb - Josef E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接