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

  • 相关阅读:
    MongoDB数据库性能分析(转)
    C++中拷贝构造函数
    C++中的继承和组合区别使用
    几种调用约定
    动态规划(基础篇)
    C++中的三种继承public,protected,private
    STl中的排序算法
    STL中的常用算法
    C++初始化函数列表
    设计模式之装饰模式(Decorator)
  • 原文地址:https://www.cnblogs.com/maydow/p/4797275.html
Copyright © 2020-2023  润新知