面试题

本文探讨了Android面试中常见的Activity生命周期、音乐播放、Service启动方法、电话状态监听及ListView优化等关键问题。例如,两个Activity跳转时,A会执行onPause(),B执行onCreate()等;音乐播放时,即使跳转,也可通过后台处理保持播放;Service的启动方法包括startService()和bindService(),前者用于一次性任务,后者用于交互式任务;优化大量数据的ListView可通过动态加载和复用视图提高效率。
摘要由CSDN通过智能技术生成

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就会一直存在,自然就可以一直播放了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值