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