回答思路:是什么?有什么用?需要注意什么?相同功能的有哪些类?这些类之间有什么异同?
1、简述Activity的生命周期?两个Activity跳转必然执行的是哪些方法
从A跳到B,有两种情况,
第一种B是透明的或者Dialog样式的Activity,那么A会执行onPause,B会执行onCreate onStart onResume ,
B按返回键,此时B会执行onPause onStop onDestory 假如此时A没有被Kill,那么就会onResume 假如被killed,那么就会重新开始生命周期
第二种B是普通的Activity,那么A会执行onPause onStop B会执行onCreate onStart onResume
B按返回键 此时B会执行onPause onStop onDestory 假如A被Killed ,那么重新开始生命周期,否则 onRestart onStart onResume
2、跳转的时候如何保存之前EditText的内容
假如这个EditText有Id,那么系统就会自动保存改状态,假如没有的就需要在onPause里面保存
关于onSaveInstanceState(),它是在Activity被系统回收(注意是被系统回收,kill)时,才会调用这个函数保存实例状态,以便在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。
从A跳转到B,且A没有被Kill,这时不会调用这个方法;从B返回也不会调用,因为系统知道这个Activity的状态不需要被保留,并且再次进入的时候希望得到新的界面。
有些时候希望保存一些其他的东西,例如在播放视频横竖屏切换的时候,需要保存播放时间,则可以重写这个方法
如:
@Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub outState.putInt("currentposition", videoView.getCurrentPosition()); Log.v("tag", "onSaveInstanceState"); super.onSaveInstanceState(outState); }
参考:http://blog.csdn.net/ddna/article/details/5123482
http://blog.csdn.net/yuzhiboyi/article/details/7677026
3、不用Service,B页面为音乐播放,从A跳到B,再返回,如何使音乐继续播放?
A使用startActivityForResult方法开启B,B类结束时调用finish;A类的Intent有一个子Activity结束事件onActivityResult,在这个事件里继续播放音乐。
4、Service有哪些启动方法?有什么区别?
第一次启动Service的时候,先后调用onCreate(),onStart(),这两个方法,当停止Service的时候,执行onDestory方法。需要注意的是,如果Service已经启动了,再次启动Service不会再执行onCreate,而是执行onStart。
启动Service有两种方法:bindService和startService
1)startService启动方式
用这种方式启动Service,会经历onCreate和onStart,直到stopService才会调用onDestory。假如不调用stopService,则Service会一直在后台运行
2)bindService启动方式
这种方式会先调用onCreate,然后是调用onBind与调用者绑定在一起,调用者退出了,Service也就退出了 onUnbindService->onDestory。调用者也可以使用
unbindService停止服务。
5、两个Activity之间如何传递数据
1)基本类型的直接用
在A中 Intent.putExtra("axx","xx"); B中getIntent().getIntExtra("0xx","");
Bunble bundle=new Bundle(),bundle.putString("",""); intent.putExtras(buddle); 接收 bundle=getIntent.getExtras();bundle.getString("");
2)对象的传递,对象需要序列化实现Serializable接口或者Parcelable接口
Intent intent = new Intent(Protocol.EX2U_TASK); Bundle bundle = new Bundle(); bundle.putSerializable("ex2uExt", ex2uExt); intent.putExtras(bundle);
接收的时候
(Ex2uorderExt )intent.getSerializableExtra("ex2uExt");
6、Task任务栈是怎么分配的?
Task栈其实是Activity栈,通过四种启动模式来说明。