2017年常见android面试题

五大布局:

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)

推荐阅读更多精彩内容