繁体   English   中英

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

[英]Moving logic from MainActivity to another class in Android

我的应用程序上有一个简单的逻辑,可以查找某个音调。
问题是逻辑在app的OnCreate方法中(它必须在应用程序运行的那一刻检测音调)。
它有点难看,因为我计划在应用程序启动时添加更多逻辑。
有没有人有任何关于如何将该代码移动到另一个类的建议,以便可以从那里调用它?
该类仍然必须访问主要活动中的视图。

@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 此util类应包含公共静态方法,您可以从代码中的任何位置调用它们。 onCreate()情况下,您可以这样调用它: AudioUtils.lookForPitch() 此外,如果您想处理仅在您的Activity中可访问的视图,您可以将它们作为参数传递。 所以AudioUtils的方法可能如下所示:

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

只是让它成为一种方法

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

    myLongAndSweetMethod();
}

private void myLongAndSweetMethod(){
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();
}

然后使用Android Studio的Code折叠来隐藏它。

如果你想提高你的代码的可读性,我可以推荐Robert C. Martin(又名Bob叔叔)的书“清洁代码:敏捷软件工艺手册”。

这本书真的很棒! 它帮助我做了很多工作,使我的代码更干净,更易于阅读。 如果您想成为一名专业软件开发人员,那么这本书应该已经阅读过了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM