Android面试点总结

 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值