Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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-等待或闪烁(加载消息)_Android_Multithreading - Fatal编程技术网

Android-等待或闪烁(加载消息)

Android-等待或闪烁(加载消息),android,multithreading,Android,Multithreading,到目前为止,我已经人为地将延迟插入到后台任务中,以确保显示正在加载的内容。我刚刚删除了这一点,现在对于一个单帧加载显示一个漩涡的东西,然后显示编译的内容(因为后台线程完成) 我如何解决这个问题?我想在启动后台任务后增加几毫秒的延迟(到主线程),这样它就可以从新活动立即进入内容。然而,这个延迟似乎很短,因为假设它花费了5毫秒以上,加载就会显示出来,然后在需要6或7毫秒的事情上闪烁——还有,故意阻塞主线程——对我来说听起来很愚蠢 另一种选择是延迟后台线程,如果某个线程开始加载等待时间少于十分之一秒,

到目前为止,我已经人为地将延迟插入到后台任务中,以确保显示正在加载的内容。我刚刚删除了这一点,现在对于一个单帧加载显示一个漩涡的东西,然后显示编译的内容(因为后台线程完成)

我如何解决这个问题?我想在启动后台任务后增加几毫秒的延迟(到主线程),这样它就可以从新活动立即进入内容。然而,这个延迟似乎很短,因为假设它花费了5毫秒以上,加载就会显示出来,然后在需要6或7毫秒的事情上闪烁——还有,故意阻塞主线程——对我来说听起来很愚蠢

另一种选择是延迟后台线程,如果某个线程开始加载等待时间少于十分之一秒,则发布结果。这样就出现了加载,看起来就像加载了一样

添加这样的延迟让我想起了一些时候,当我消除延迟并声称我使它快了好几倍时,它们不是好日子。这对我来说也更为复杂,因为假设我有5个背景,我不希望它们一次只出现一个,间隔十分之一秒(文件系统缓存意味着第二个会快得多),而且AsyncTask非常好

也许等待所有任务完成,然后处理结果


无论如何,我相信这个问题以前已经被正视和解决过

你有两个主要的地方来处理这个问题。(1)执行工作的后台线程和(2)在处理UI时在UI线程中打开的线程在后台任务开始和结束时发生更改。同样重要的是,任务是否会一直持续大约相同的时间,或者有时可能需要更长的时间(即,下载内容将取决于网络和服务器)

如果您可以期望它总是快速响应用户操作,那么您可能不显示加载消息就可以离开

如果你给任务增加了额外的持续时间,那就是每次“浪费”的时间。后台任务关注的是完成任务,而不是如何向用户展示结果

另一个位置是事物的UI端。如何在结果准备就绪后向用户显示结果。考虑有一个“分钟”时间。这意味着“加载”消息将在屏幕上持续至少一段时间。如果任务耗时超过此值,则不会向任务持续时间中添加额外的时间。这可以通过在启动后台任务时启动超时来完成,并且只有在两者都完成后才隐藏“加载”消息。也就是说,从加载切换到结果需要的时间与两者中最长的时间一样长

您可以做的另一件事是在显示“正在加载”消息之前等待一定的时间。因此,如果您的任务有时是即时的,那么在显示消息之前的延迟将阻止闪烁

第三个可以使用的工具是动画。例如,淡入淡出加载消息和旋转进度指示器。如果后台任务很快完成,那么加载消息将有点模糊,或者至少不会突然显示和消失

例如,这两件事都做