Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio Java线程_Java_Android_Multithreading - Fatal编程技术网

Android Studio Java线程

Android Studio Java线程,java,android,multithreading,Java,Android,Multithreading,我在Android Studio中读到了关于线程的文章,我想问一些问题。线程是我的应用程序中必须具备的,以避免延迟,还是仅当你制作非常大且消耗性的应用程序时?我问这个问题是因为我的应用程序几乎没有延迟,我想知道这是否是因为我没有使用线程。我不认为这是因为我做了无用的东西,我对此非常警惕。线程是构建任何大规模应用程序的重要组成部分。例如,让我们假设您有一行代码来执行某个工作单元,例如,这需要一些时间才能完成 ... // takes 500ms to complete could be a net

我在Android Studio中读到了关于线程的文章,我想问一些问题。线程是我的应用程序中必须具备的,以避免延迟,还是仅当你制作非常大且消耗性的应用程序时?我问这个问题是因为我的应用程序几乎没有延迟,我想知道这是否是因为我没有使用线程。我不认为这是因为我做了无用的东西,我对此非常警惕。

线程是构建任何大规模应用程序的重要组成部分。例如,让我们假设您有一行代码来执行某个工作单元,例如,这需要一些时间才能完成

...
// takes 500ms to complete could be a network operation/could be accessing camera, 
// initializing recorder etc. (Initalizing recorder takes 100ms most of the time)
   doSomeTimeIntensiveTask(); 
...
在这种情况下,您需要在不同的线程上执行此任务,而不是在您的UI/主线程上执行此任务,因为对于使用应用程序的最终用户来说,如果您在UI/主线程上执行此任务,则他/她会注意到时间延迟是一种结巴/滞后的体验,这通常会导致糟糕的UI体验

此外,还有一些任务,如发出HTTP请求,在这种情况下实际完成需要一定的时间,如果这些任务是在UI/主线程上执行的,那么应用程序将被卡住,直到任务完成,这有时会导致android操作系统显示弹出消息,如
应用程序似乎没有响应是否要强制关闭应用程序?
或类似消息,这同样是糟糕的用户体验


因此,在您的情况下,我将尝试准确地确定是哪段代码导致了UI/主线程中的延迟,并将该部分代码放在单独的线程中,然后编写回调以继续正确执行。

如果没有更多信息,任何人都不可能以任何合理的方式回答这个问题

但是,一般来说,创建额外线程(超出框架中已经使用的线程)的主要原因是,如果您正在执行繁重的操作,例如I/O(繁重的读/写或http)、图形或非常复杂的计算

调查和调查

请简要引用与此问题最相关的部分:

当您的应用程序响应用户交互执行密集工作时,除非您正确实现应用程序,否则此单线程模型可能会产生较差的性能。具体来说,如果所有事情都发生在UI线程中,那么执行长时间操作(如网络访问或数据库查询)将阻塞整个UI。线程被阻止时,无法调度任何事件,包括图形事件。从用户的角度来看,应用程序似乎挂起了。更糟糕的是,如果UI线程被阻塞超过几秒钟(目前大约5秒钟),用户将看到臭名昭著的“应用程序未响应”(ANR)对话框。如果用户不满意,他们可能会决定退出应用程序并卸载它