关闭

Android面试点总结

106人阅读 评论(0) 收藏 举报

 serializable和parcelable的区别 

两种都是用于支持序列化、反序列化话操作,两者最大的区别在于存储媒介的不同,Serializable使用IO读写存储在硬盘上,而Parcelable是直接在内存中读写,很明显内存的读写速度通常大于IO读写,所以在Android中通常优先选择Parcelable。

2  Fragment之间传递数据  Fragment和Activity传递数据

 Fragment之间可以用fragment.setArguments  和 getArguments 

Fragment和Activity之间传递 

一种最简单的Fragment获取 getActivity().

或者Activity实现一个接口,Fragment在onAttach方法中,将该Activity转化为该接口,在需要调用的时候回调


3 内存溢出和内存泄漏的区别

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

memory leak会最终会导致out of memory!

一句话Memory Leak泄露不会崩溃,但多了会有可能导致OOM崩溃 例子:比如在Activity中注册了一个广播接收器,但是在页面关闭的时候没有进行unRegister,就会出现内存溢出的现象。如果我们的java运行很久,而这种内存泄露不断的发生,最后就没内存可用了,最终就是我们看到的OOM错误

Bitmap的不当处理极可能造成OOM,绝大多数情况应用程序OOM都是因这个原因出现的。Bitamp位图是Android中当之无愧的胖子,所以在操作的时候必须小心。
及时释放recycle。由于Dalivk并不会主动的去回收,需要开发者在Bitmap不被使用的时候recycle掉

4 android 6.0运行时权限问题

Activity和Fragment调用相应的requestPermissions

 详细链接:http://www.w2bc.com/article/android-6-0-runtime-permission

Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测,以下权限都需要在运行时判断:

身体传感器
日历
摄像头
通讯录
地理位置
麦克风
电话
短信
存储空间
我们需要在build.gradle中声明targetSdkVersion为23
检查并申请权限
我们需要在用到权限的地方,每次都检查是否APP已经拥有权限,比如我们有一个下载功能,需要写SD卡的权限,我们在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限

   if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
              != PackageManager.PERMISSION_GRANTED) {
          //申请WRITE_EXTERNAL_STORAGE权限
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                  WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
      }

请求权限后,系统会弹出请求权限的Dialog 

用户选择允许或需要后,会回调onRequestPermissionsResult方法, 该方法类似于onActivityResult

5  PendingIntent和Intent的区别

PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。 可以理解为延迟执行的intent,PendingIntent是对Intent一个包装

Intent 是及时启动,intent 随所在的activity 消失而消失。 

Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上

6 Activity的两种启动方式和Intent解析

intent解析 :http://www.cnblogs.com/engine1984/p/4146621.html

一种是显示启动 

  • Intent intent=new Intent(this,OtherActivity.class);  //方法1 直接class类名跳转
  • Intent intent2=new Intent();
  • intent2.setClass(this, OtherActivity.class);//方法2 setClass跳转
  • intent2.setClassName(this, "com.zy.MutiActivity.OtherActivity");  //方法3 包名跳转 此方式可用于打开其它的应用 
  • intent2.setComponent(new ComponentName(this, OtherActivity.class));  //方法4
  • startActivity(intent2);
一种是隐式启动

隐式调用方法(只要action、category、data和要跳转到的Activity在AndroidManifest.xml中设置的匹配就OK



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6139次
    • 积分:137
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    最新评论