我一直在为我的婴儿儿子的声音制作一个音板应用程序。该应用程序只是打开到 MainActivity 类,它显示一个可滚动的按钮列表,当按下这些按钮时,将播放我儿子尖叫的预先录制的 MP3。
一旦它在我的 Nexus 7 上调试或运行,就会出现 Choreographer 错误,并且会跳过 50 到 90 帧之间的某处。警告是“应用程序可能在其主线程上做了太多工作”。在我的设备上,三个随机按钮拒绝播放声音,直到应用程序关闭并重新打开,但另外三个随机按钮拒绝工作。当我的应用在一个简单的 LinearLayout(没有 ScrollView)中只有八个按钮时,不会出现这个问题。
我是 Java 和 Android 编程的初学者,但据我猜测,我可笑的糟糕代码占用了太多内存而无法正常运行。我的问题是,您将如何编写一个包含 33 个播放自己声音的按钮的可滚动列表,或者有人可以教我如何改进我的代码吗?
MainActivity.java(仅显示此问题的前三个按钮/声音):
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MediaPlayer ahh = MediaPlayer.create(this, R.raw.ahh);
final MediaPlayer dededeh = MediaPlayer.create(this, R.raw.dededeh);
final MediaPlayer neganegabunbunbug = MediaPlayer.create(this, R.raw.naganagbunbun);
Button bahh = (Button) this.findViewById(R.id.Ahhhbutton);
bahh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ahh.start();
}
});
}
}
还有activity_main.xml(同样只有这个问题的前三个按钮):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/Ahhhbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@layout/button_shape"
android:text="@string/button1a"
android:textColor="#d1d1d1"
android:textSize="20sp" />
<Button
android:id="@+id/dededehbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@layout/button_shape"
android:text="@string/button1b"
android:textColor="#d1d1d1"
android:textSize="20sp" />
<Button
android:id="@+id/neganegabunbunbugbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="@layout/button_shape"
android:text="@string/button1c"
android:textColor="#d1d1d1"
android:textSize="20sp" />
Button bdededeh = (Button) this.findViewById(R.id.dededehbutton);
bdededeh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dededeh.start();
}
});
Button bnaganagbunbun = (Button) this.findViewById(R.id.naganagabunbutton);
bnaganagbunbun.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
neganegabunbunbug.start();
}
});
</LinearLayout>
</ScrollView>
</LinearLayout>