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

  • 相关阅读:
    es6 export 和export default的区别
    Vue 中 export及export default的区别
    深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
    深入理解javascript选择器API系列第三篇——HTML5新增的3种selector方法
    深入理解javascript选择器API系列第二篇——getElementsByClassName
    深入理解javascript选择器API系列第一篇——4种元素选择器
    理解jQuery对象$.html
    深入理解DOM节点操作
    深入理解DOM节点关系
    深入理解DOM节点类型第一篇——12种DOM节点类型概述
  • 原文地址:https://www.cnblogs.com/maydow/p/4797275.html
Copyright © 2020-2023  润新知