Android 面试题-四大组件

回答思路:是什么?有什么用?需要注意什么?相同功能的有哪些类?这些类之间有什么异同?

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栈,通过四种启动模式来说明。

原文地址:https://www.cnblogs.com/maydow/p/4797275.html