[英]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();
}
基本上,您有两个选项可以使代码更清晰。
onCreate()
所有代码(前两行除外)移动到另一个方法中,比如说lookForPitch()
。 然后你可以在onCreate()
调用它。 如果您计划创建更多专注于音频处理的方法,则可以创建单独的类,例如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.