将MainActivity中的逻辑移动到Android

时间:2015-07-11 16:09:53

标签: java android

我的应用程序上有一个简单的逻辑,可以找到一定的音高 问题是逻辑是在应用程序的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();
}

3 个答案:

答案 0 :(得分:1)

基本上,您有两种方法可以使代码更清晰。

  1. onCreate()中的所有代码(前两行除外)移到另一个方法中,假设为lookForPitch()。然后,您可以在onCreate()
  2. 中调用它
  3. 如果您计划创建更多专注于音频处理的方法,则可以创建单独的类,例如AudioUtils.java。此util类应包含公共静态方法,您可以从代码中的任何位置调用它们。如果是onCreate(),您可以这样称呼它:AudioUtils.lookForPitch()。此外,如果您想处理仅在您的Activity中可访问的视图,您可以将它们作为参数传递。因此,AudioUtils中的方法可能如下所示:

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

答案 1 :(得分:-1)

让它成为一种方法

@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 folding隐藏它。

答案 2 :(得分:-1)

如果你想提高你的代码的可读性,我可以推荐这本书"清洁代码:敏捷软件工艺手册"罗伯特C.马丁(又名叔叔鲍勃)。

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