java - 将逻辑从 MainActivity 移动到 Android 中的另一个类

标签 java android

我的应用程序中有一个简单的逻辑,用于查找特定音调。
问题是逻辑在应用程序的 OnCreate 方法中(它必须在应用程序运行时检测音调)。
它有点难看,因为我打算在应用程序启动时添加更多逻辑。
有没有人对如何将该代码移动到不同的类以便可以从那里调用它有任何建议?
该类仍然必须访问主 Activity 中的 View 。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
    dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, new PitchDetectionHandler() {

        @Override
        public void handlePitch(PitchDetectionResult pitchDetectionResult,
                                AudioEvent audioEvent) {

            final float pitchInHz = pitchDetectionResult.getPitch();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Float value = pitchInHz;
                    Toast.makeText(getApplicationContext(),value.tostring(), Toast.LENGTH_SHORT).show();
                }
            });

        }
    }));
    foo = new Thread(dispatcher,"Audio Dispatcher");
    foo.start();
}

最佳答案

基本上,您有两种选择可以让您的代码更简洁。

  1. onCreate() 中的所有代码(除了前两行)移到另一个方法中,比方说 lookForPitch()。然后你就可以在 onCreate() 中调用它了。
  2. 如果您打算创建更多专注于音频处理的方法,您可以创建单独的类,例如 AudioUtils.java。此实用程序类应包含公共(public)静态方法,您可以从代码中的任何位置调用这些方法。如果是 onCreate(),您可以这样调用它:AudioUtils.lookForPitch()。此外,如果你想处理只能在你的 Activity 中访问的 View ,你可以将它们作为参数传递。所以您在 AudioUtils 中的方法可以如下所示:

    public static void lookForPitch(TextView myTextView) {
        // your code goes here
    }
    

关于java - 将逻辑从 MainActivity 移动到 Android 中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359102/

相关文章:

java - 单线程 Java 应用程序 - htop 显示 14 行

Java 异常循环和弃用(或者是 URLEncoding 的东西?)

android - 在 Activity 中调用 Fragment 方法导致空指针异常

android - 在 Android Studio 中共享模块之间的外部依赖

android - 每次调用 onMeasure() 和 onSizeChanged() 时 View 变小

java - 如何将图标添加到 Android Studio 的抽屉导航模板?

java - Retrofit2 POST 方法获取代码 400,但适用于 ReSTLet 客户端

java - Servlet 作为 JSP Java 配置

java - 使用 Json 解析 Gson 不适用于 Android

可绑定(bind)的Android前台服务