2017年常见android面试题

作者: 宇宙只有巴掌大 | 来源:发表于2017-03-21 21:11 被阅读396次
    五大布局:

    LinearLayout线性布局
    FrameLayout层叠布局
    TableLayout 表格布局
    AbsoluteLayout绝对布局
    RelativeLayout 相对布局

    activity生命周期,对应的生命周期:

    onCreate()----onDestroy()
    onStart()----onStop()
    onResume()----onPause()

    fragment生命周期步骤

    onAttach()---onCreate()---onCreateView()----onActivityCreated() //这四个对应的是activity的onCreate()

    onstart() //对应activity的是onStart()
    onResume() //对应activity的是onResume()
    onPause() //对应activity的是onPause()
    onStop() //对应activity的是onStop()

    onDestroyView()----onDestroy()----onDetach() //这三个对应activity的onDestroy()

    切换横竖屏activity生命周期:

    总结:
    1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

    2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

    3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

    数据存储五种方式:
    1 SharedPreferences存储数据
    2 文件存储数据      
    3 SQLite数据库存储数据
    4 使用ContentProvider存储数据
    5 网络存储数据
    
    ListView优化:

    1、convertView重用
    2、ViewHolder优化
    3、图片加载优化
    4、onClickListener处理
    5、减少Item View的布局层级
    6、adapter中的getView方法尽量少使用逻辑
    7、adapter中的getView方法尽量少做耗时操作
    8、adapter中的getView方法避免创建大量对象
    9、将ListView的scrollingCache和animateCache设置为false

    service启动方式:

    两种启动方式
    startService() -----stopService() 或者 selfStop() 结束service
    bingService() -----另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。

    广播:

    两种发送广播方式,
    sendBroadcast();同步广播
    sendOrderedBroadcast();有序广播----有序广播可以通过设置android:priority="xxx" 优先级

    1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。
    2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。

    //选择排序

        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length; j++) { //i+1最小值已经比较完毕,所以每次i+1对比后面的值
                if (arr[i] > arr[j]) { //如果i值大于j 值则换位
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }```
    //冒泡排序
    ```public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }```
    
    2017常见面试题
    [最新2017(Android)安卓面试题级答案(精选版)](http://www.2cto.com/kf/201702/603678.html)
    [[android面试题总结加强再加强版(三)](http://blog.csdn.net/scott2017/article/details/51915136)](http://blog.csdn.net/scott2017/article/details/51915136)
    [[Android面试题整理](http://blog.csdn.net/scott2017/article/details/51914975)](http://blog.csdn.net/scott2017/article/details/51914975)
    

    相关文章

      网友评论

        本文标题:2017年常见android面试题

        本文链接:https://www.haomeiwen.com/subject/fgfvnttx.html