Android Cookie

Android 安卓是最开放的手机操作系统,谷歌安卓APP开发和安卓市场的相关话题

Android 2.3 Visualizer – 理解getFft()的麻烦

第一次在这里如此抱歉任何屠宰格式。 所以我对DSP是全新的,所以我对傅立叶变换只有非常全面的了解。 我正在尝试为Android SDK 9构建一个可视化应用程序,其中包括android.media.audiofx.Visualizer中的Visualizer类http://developer.android.com/reference/android/media/audiofx/Visualizer.html 方法getFft()的javadoc,这是我使用的状态: “返回当前正在播放的音频内容的频率捕获。捕获是一个8位幅度的FFT。请注意,FFT的大小是指定捕获大小的一半,但是频谱的两边都返回,产生的字节数相等捕捉大小。“ 首先,“光谱的双方”是什么意思? 该输出与标准FFT有何不同? 下面是字节数组的一些示例输出,getFft()给出了124点以保持简单,我抓住了前31个分档。 以下是前31个箱子的大小: {123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 12} 任何帮助或解释将不胜感激! 编辑: 因此,在盯着一堆图表后,看起来我的问题的一部分是谷歌没有指定使用的是哪个单位。 几乎所有其他测量都是以mHz进行的,假设FTT输出也是mHz是否公平? 有没有我可以看到Visualizer类的源代码的地方所以也许我可以弄清楚幕后真的到底是什么? 我继续抓住了getFft()的所有输出 93, -2, -28, -16, -21, 19, […]

Android客户端使用线程与服务器通信的最佳实践

我正在构建一个Android应用程序,只要应用程序正在运行,它就会定期与服务器通信。 我通过在应用程序启动时启动与服务器的连接来执行此操作,然后我有一个单独的thread用于接收名为ReceiverThread的消息,此thread从socket读取消息,对其进行分析,并将其转发到应用程序的相应部分。 这个thread在一个循环中运行,读取它必须读取的内容然后阻塞read()命令直到新数据到达,因此它花费大部分时间被阻塞。 我处理通过一个名为SenderThread的不同线程发送消息。 我想知道的是:我应该以类似的方式构建SenderThread吗? 我应该为这个线程保留一些forms的队列,让它发送队列中的所有消息然后阻塞直到新消息进入队列,或者我应该每次需要发送消息时启动线程的新实例,让它发送消息,然后“死”? 我倾向于第一种方法,但我不知道在性能方面(在内存中保持阻塞线程与初始化新线程)以及代码正确性方面实际上更好。 此外,由于我的所有活动都需要能够发送和接收消息,我持有对Application类中的两个线程的引用,这是一种可接受的方法还是应该以不同的方式实现它? 我遇到的一个问题是,有时如果我关闭我的应用程序并再次运行它实际上有两个ReceiverThread实例,所以我得到一些消息两次。 我猜这是因为我的应用程序实际上没有关闭,前一个线程仍处于活动状态(在read()操作上被阻止),当我再次打开应用程序时,新的线程被初始化,但两者都连接到了服务器所以服务器将消息发送给两者。 有关如何解决此问题的任何提示,或者如何完全重新组织它以使其正确无误? 我试着查看这些问题,但发现了我的第一个问题的一些相互矛盾的例子,没有什么是有用的,适用于我的第二个问题……

Android @Singleton上的Dagger 2注释类没有被注入

我目前正在尝试将Dagger 2集成到Android应用程序中。 我的项目设置如下: 图书馆 应用程序(取决于库) 在我的库项目中,我定义了一个类,我稍后将其注入到库中的其他需要它的类(活动和常规类)以及应用程序项目中。 @Singleton public class MyManager{ @Inject public MyManager(){ //Do some initializing } } 现在 – 例如在我的片段或活动或常规类中,我将按如下方式注入上述Singleton: public class SomeClass{ @Inject MyManager myManager; } 或者我想,因为在实践中,myManager总是为空。 而且显然它的构造函数从未被调用过,所以我想我必须错过一些配置方面的东西? 或者我可能误解了文档并且它根本不是以这种方式工作的? MyManager类的目的是成为应用程序范围内可访问的组件累积实体 – 这就是我选择@Singleton的原因。 UPDATE 为了避免混淆:我在评论中提到了我的组件,我认为 – 这是指“基于组件的设计”中的组件,与匕首无关。 我上面列出了基于匕首的代码 – 我的代码中没有任何与dagger相关的代码。 当我开始添加@Component时,我遇到了一些编译器问题,因为我的dagger2设置不正确 – 请查看这个关于如何正确设置dagger2的真正有用的线程: https ://stackoverflow.com/a/29943394/1041533 更新2 这是我更新的代码,基于G. Lombard的建议 – 我更改了代码如下 – 原始的Singleton在库项目中: @Singleton public […]