Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 View对象管理后台线程是否常见? 我来自更多C++背景,我们有丰富的析构函数来优雅地阻止后台操作(包括在UI组件中必要时)。我正在做一个android端的小项目,我想可视化地呈现wav文件。我对使用任何库都不感兴趣,这更像是一种练习_Android_User Interface_Concurrency_Signal Processing - Fatal编程技术网

Android View对象管理后台线程是否常见? 我来自更多C++背景,我们有丰富的析构函数来优雅地阻止后台操作(包括在UI组件中必要时)。我正在做一个android端的小项目,我想可视化地呈现wav文件。我对使用任何库都不感兴趣,这更像是一种练习

Android View对象管理后台线程是否常见? 我来自更多C++背景,我们有丰富的析构函数来优雅地阻止后台操作(包括在UI组件中必要时)。我正在做一个android端的小项目,我想可视化地呈现wav文件。我对使用任何库都不感兴趣,这更像是一种练习,android,user-interface,concurrency,signal-processing,Android,User Interface,Concurrency,Signal Processing,我正在尝试创建一个视图对象,它可以有效地提供一个WavFile对象(我自己设计的一个对象,它使用我编写的一个小型RIFF解析框架)。该视图组件的目标是允许以不同的缩放级别渲染波形 主视图对象(WavView)扩展了HorizontalScrollView,并具有一个子波形渲染器。其想法是,随着缩放因子的增加,孩子可以水平地变大,从而允许用户在缩放后的波形中滚动 随着缩放因子的增加,视图将缩小其读取的样本的缩小范围,例如,如果缩小范围为500,则缩小数据集中的每个样本将缩小[0]=平均值(源[0,

我正在尝试创建一个视图对象,它可以有效地提供一个WavFile对象(我自己设计的一个对象,它使用我编写的一个小型RIFF解析框架)。该视图组件的目标是允许以不同的缩放级别渲染波形

主视图对象(WavView)扩展了HorizontalScrollView,并具有一个子波形渲染器。其想法是,随着缩放因子的增加,孩子可以水平地变大,从而允许用户在缩放后的波形中滚动

随着缩放因子的增加,视图将缩小其读取的样本的缩小范围,例如,如果缩小范围为500,则缩小数据集中的每个样本将缩小[0]=平均值(源[0,499]),缩小[1]=平均值(源[500,999]),等等。缩小范围根据WavView对象的宽度动态计算,因此,默认情况下,缩放因子为1,这意味着波形正好适合WavView(例如,无滚动)

这意味着每次缩放因子或父宽度发生变化时,我必须通读wave文件,并根据缩小范围执行所有缩小。我为解析数据而设计的框架在回放数据时也应该很有用。由于wav PCM样本是小端点,因此该框架将它们转换为大端点,以便也可以用于播放

所有这些都不便宜,显然必须在单独的线程上完成。我希望能够将所有这些功能封装在同一类型中,从而使向其传递wave文件并进行渲染变得超级简单。减少样本时,父级将显示进度指示器,完成后将显示渲染的波形

但是当我遇到另一个文件被设置、活动被终止或者视图被从布局树中删除的情况时,我显然需要停止线程。这是android视图通常实现的吗?我应该换一种方式吗?我想保持尽可能多的封装

编辑:AsyncTask似乎有助于完成此任务

这是android视图通常实现的吗

不,视图处理线程根本不是常见的做法。Android中的视图是MVP意义上的视图。他们应该能够通过传递给他们的数据快速呈现自己,而不是真正“意识到”任何复杂的业务逻辑。将波形传递给视图可能没有意义,因为如您所述,如果没有线程,解释波形将使系统陷入困境


编写一个演示者,可以获取波形并将其渲染为背景线程中的位图,这可能会更好。您可以将其绑定到自定义视图,以便演示者将完成的位图发布到该视图,该视图可以非常快速地进行渲染,但演示者总是将下一个波形写入另一个线程中的不同位图。此演示者应绑定到活动或片段生命周期,您必须处理视图被删除、缩放或调整大小等问题。

谢谢您的回答。这实际上是我计划去的地方,处理文件解析并绘制位图,因为在onDraw期间绘制几百点长的路径也不便宜。我没有意识到我没有提到那一部分(已经有这么多文本了)。我想知道每个视图实例是否应该管理一个单独的加载绘图线程,但也许最好使用单个作业队列来处理每个解析和绘图操作,而不是同时处理多个。