我正在开发一个对 android studio 中的吉他和弦感兴趣的应用程序。有 2 个微调器可以选择和弦,并且有一个 ImageView 可以在屏幕上显示和弦图。当用户选择和弦时,其图表会出现在屏幕上并播放。不幸的是它真的很慢。我怎样才能让它更快? 这是 Java 类
public class Chords extends ActionBarActivity implements AdapterView.OnItemSelectedListener {
String[] notes = {"A", "B", "C","C#","D", "E", "F","F#", "G"};
String[] mode = {"m", "m7", "5", " ", "7M", "dim", "aug", "sus2"};
Spinner sp;
Spinner spinner2;
TextView textView;
TextView t;
TextView t2;
MediaPlayer mySound,mySound2,mySound3,mySound4,mySound5,mySound6,mySound7;
private static ImageView imgView;
int[] images = {R.drawable.aminor,R.drawable.eminor,R.drawable.a_major,R.drawable.cmajor,R.drawable.gmajor,R.drawable.dminor,R.drawable.bminor};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.chords_screen);
textView = (TextView) findViewById(R.id.textView);
sp = (Spinner) findViewById(R.id.spinner);
spinner2 = (Spinner) findViewById(R.id.spinner2);
t2=(TextView) findViewById(R.id.textView2);
//creating adapter
ArrayAdapter<String> adapter_state = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, notes);
ArrayAdapter<String> adapter_state2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mode);
//setting drop down list type
adapter_state.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter_state2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//setting adapter to spinner
sp.setAdapter(adapter_state);
spinner2.setAdapter(adapter_state2);
//setting listener to spinner
sp.setOnItemSelectedListener(this);
spinner2.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
imgView = (ImageView) findViewById(R.id.imageView);
mySound = MediaPlayer.create(this, R.raw.am);
mySound2 = MediaPlayer.create(this, R.raw.em);
mySound3 = MediaPlayer.create(this, R.raw.amajor);
mySound4 = MediaPlayer.create(this, R.raw.cmajor);
mySound5 = MediaPlayer.create(this, R.raw.gmajor);
mySound6 = MediaPlayer.create(this, R.raw.dminor);
mySound7 = MediaPlayer.create(this, R.raw.bm);
if (sp.getSelectedItemPosition() == 0 && spinner2.getSelectedItemPosition() == 0) {
mySound.start();
imgView.setImageResource(images[0]);
}
if (sp.getSelectedItemPosition() == 0 && spinner2.getSelectedItemPosition() == 3) {
mySound3.start();
imgView.setImageResource(images[2]);
}
if (sp.getSelectedItemPosition() == 1 && spinner2.getSelectedItemPosition() == 0) {
mySound7.start();
imgView.setImageResource(images[6]);
}
if (sp.getSelectedItemPosition() == 2 && spinner2.getSelectedItemPosition() == 3) {
mySound4.start();
imgView.setImageResource(images[3]);
}
if (sp.getSelectedItemPosition() == 4 && spinner2.getSelectedItemPosition() == 0) {
mySound6.start();
imgView.setImageResource(images[5]);
}
if (sp.getSelectedItemPosition() == 5 && spinner2.getSelectedItemPosition() == 0) {
mySound2.start();
imgView.setImageResource(images[1]);
}
if (sp.getSelectedItemPosition() == 8 && spinner2.getSelectedItemPosition() == 3) {
mySound5.start();
imgView.setImageResource(images[4]);
}
}
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
}
最佳答案
mySound = MediaPlayer.create(this, R.raw.am);
mySound2 = MediaPlayer.create(this, R.raw.em);
mySound3 = MediaPlayer.create(this, R.raw.amajor);
mySound4 = MediaPlayer.create(this, R.raw.cmajor);
mySound5 = MediaPlayer.create(this, R.raw.gmajor);
mySound6 = MediaPlayer.create(this, R.raw.dminor);
mySound7 = MediaPlayer.create(this, R.raw.bm);
不要这样做。创建 1 个媒体播放器。 MediaPlayer 是一个庞大的对象,创建其中的 7 个非常痛苦且缓慢。您甚至不应该在每次点击时都创建一个新的,它应该在您的 oncreate 中创建,而是创建一个新的数据源集。
关于java - 项目运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39280995/