我正在开发一个对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 adapter_state = new ArrayAdapter(this, android.R.layout.simple_spinner_item, notes);
ArrayAdapter adapter_state2 = new ArrayAdapter(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. MediaPlayer是一个庞大的对象,创建其中的7个非常痛苦且缓慢.您甚至不应该在每次单击时都创建一个新的对象,而应该在oncreate中创建它,而应该在新的数据源集中创建它.
标签:android-studio,java,android
来源: https://codeday.me/bug/20191026/1938679.html