java - 项目运行缓慢

标签 java android android-studio

我正在开发一个对 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/

相关文章:

java - 初始化非静态成员 : C++ and Java comparison

android - 主要 Activity 之前的 Activity 两颗星

Android Studio 分析无穷大

java - 当数据库中的特定表值发生更改时通知应用程序

java - 在 "-"(indexOf)之后传入大写

java - 合并 2 个 .jks 信任库文件

java - 如何安全地使用 ArrayList 子列表以避免首次进入

android - `getContentResolver().openInputStream(uri)` 抛出 FileNotFoundException

android-studio - 解决 Android Studio 中克隆的 Kotlin 应用程序缺少运行配置的问题

android - 字体在 Android Studio 预览中更改,但在模拟器/设备中没有更改