【发布时间】:2014-06-19 16:48:14
【问题描述】:
我是 Android 新手,我正在构建一个包含 5 个按钮的应用程序,每个按钮播放不同的歌曲。我已经构建了运行正常的代码,但是该活动最多需要 2 秒才能打开,并且我在 LogCat 中收到“跳过 104 帧”警告。我所有的代码都在 onCreate 方法中,我认为这就是为什么需要这么长时间才能打开。如何创建新方法以及如何拥有相同的功能?你能举个例子吗? 我的代码:
package com.example.testapplication;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
public class SoundActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_sound);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
//SONGS
final MediaPlayer song1 = MediaPlayer.create(getApplicationContext(), R.drawable.song1);
final MediaPlayer song2 = MediaPlayer.create(getApplicationContext(), R.drawable.song2);
//BUTTONS
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
//CHECKBOX
final CheckBox loop = (CheckBox) findViewById(R.id.loop);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(loop.isChecked()) { //CHECKBOX
song1.setLooping(true);
}
if(song2.isPlaying()) {
song2.pause();
song1.start();
}
song1.start();
}
});
/* EDITED
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(loop.isChecked()) { //CHECKBOX
song2.setLooping(true);
}
if(song1.isPlaying()) {
song1.pause();
song2.start();
}
song2.start();
}
});
*/EDITED
}//onCreate
} //soundActivity class
如果在我按下 song1 按钮时正在播放歌曲 2,我需要它来停止它们并只播放歌曲 1。依此类推每个按钮,但它最多需要 5 个 if 指令。还有其他方法吗? 我从 MainActivity 开始我的 SoundActivity,代码如下:
package com.example.testapplication;
import com.example.testapplication.R;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
TextView button01 = (TextView) findViewById(R.id.button01);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
startActivity(new Intent(getApplicationContext(), SoundActivity.class));
}
});
}
}
编辑:已解决 - 我在 onStart() 方法中创建了一个新线程。代码工作得很好,活动大约需要 140 毫秒才能打开。谢谢您的回答。
【问题讨论】:
-
您的代码中没有任何东西需要时间。 onClick 中的代码在活动创建时并未执行,因此我们不必查看它。一定有别的东西。
-
好吧,这是我的全部代码。那么是什么减慢了应用程序的速度?打开活动最多需要 2-3 秒。
-
认为这两条媒体播放器系列是罪魁祸首。带他们出去测试。
-
我已经把它们拿出来了,但还是一样。你能告诉我线程示例代码需要去哪里(在 onCreate 方法或其他方法中)吗?谢谢!
-
对我来说,您不必添加线程代码。你应该先弄清楚什么是耗时的?这是你的主要活动吗?如果没有,你如何启动它?您没有发布整个活动,因为除了媒体播放器之外没有什么可以花费时间的吗?例如,您在哪里设置布局?缺少 setContentView。
标签: android android-activity methods