1、Activity的生命周期,两个Activity之间跳转时必然会执行的是那几个方法?
一般情况比如说有两个activity,分别叫A,B ,当在A里面激活B组件的时候, A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,这个时候B覆盖了窗体, A会调用onStop()方法. 如果B呢 是个透明的,或者是对话框的样式, 就不会调用onStop()方法。
2、不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?
首先创建一个专门用来播放音乐文件(在这里只播放已经导入到res/raw/下的音频文件)的类 MusicPlayer :
public class MusicPlayer implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {;
private MediaPlayer bgPlayer;
public MusicPlayer(Context context) {
this.context = context;
}
//当音乐播放完毕时
public void onCompletion(MediaPlayer mp) {
stopBgSound();
}
//当音乐播放发生错误时
public boolean onError(MediaPlayer mp, int what, int extra) {
stopBgSound();
return false;
}
//播放背景音乐,传入的paramInt为res/raw/目录下的音频文件的引用
public void playBgSound(int paramInt) {
stopBgSound();
try {
//利用音频文件创建一个MeidaPlayer
MediaPlayer mediaPlayer = MediaPlayer.create(context, paramInt);
bgPlayer = mediaPlayer;
bgPlayer.setOnCompletionListener(this);
//设置是否循环播放
bgPlayer.setLooping(true);
//开始播放
bgPlayer.start();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
//停止播放背景音乐
public void stopBgSound() {
if(bgPlayer == null)
return;
if(bgPlayer.isPlaying())
bgPlayer.stop();
bgPlayer.release();
bgPlayer = null;
}
}
然后,新建一个Activity,我命名为MyActivity :
public class MyActivity extends Activity {
public static MusicPlayer musicPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if(musicPlayer == null) {
SysSetting.getInstance(getApplicationContext()).load();
musicPlayer = new MusicPlayer(getApplicationContext());
musicPlayer.playBgSound(R.raw.welcome);
}
}
}
在这里已经完成了大部分的工作,最后一步就是,让你所需要跨Activity播放背景音乐而不使用Service的Activity都继承与这个Activity就可以了。
因为这个MusicPlayer是static的,只要都继承这个类,那么这个MusicPlayer就会一直存在,自然就可以一直播放了。