Android面试点总结

原创 2016年05月31日 21:57:31

 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



相关文章推荐

JAVA程序员之路和面试点总结

第一阶段:三年 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发。我们知道...

数据库面试点总结

1、Sql 约束http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html2、修改列类型MySQL:ALTER TABLE tableNam...
  • jeffleo
  • jeffleo
  • 2017年03月28日 19:52
  • 192

物联网试点总结报告

  • 2014年03月24日 11:40
  • 116KB
  • 下载

C++面试点2

1、构造函数 类用来初始化类对象数据成员的一个或几个特殊的和类名相同的成员函数叫做 构造函数。构造函数可以重载,可以有多个,但只能有一个缺省构造函数。undefined 构造函数没有返回类型;类可以包...

自己测试过程中总结的易忽略的测试点和经验--持续更新中

1.app多语言测试中,弹窗一般会出现居中问题。德语和法语容易在按钮和固定大小的控件上超出长度 2.web测试中,对各个输入框的报错提示可能会有重叠情况。 3.自动化测试中,页面如果刷新了,控...

C/C++求职宝典21个重点笔记(常考笔试面试点)

1. char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。 2. 10*a++ 中a先进行乘法运算再自增(笔试中经常喜欢出这类运算符优先级容易混淆...

C/C++求职宝典21个重点笔记(常考笔试面试点)(转)

char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。 10*a++ 中a先进行乘法运算再自增(笔试中经常喜欢出这类运算符优先级容易混淆的输出问题)...

C/C++求职宝典21个重点笔记(常考笔试面试点)

这是我之前准备找工作时看《C/C++求职宝典》一书做的笔记,都是一些笔试面试中常考的重点难点问题,但比较基础,适合初学者看。   1. char c = '\72'; 中的\72代表一个字符,72...

典型sql面试点-rowid删除数据

在Oracle数据库中有一表t_foo,表中有一字段id,如何高效地删除表中id字段的重复数据 ? 解答: 因为Oracle提供了两个伪例,一个是rownum,另一个是rowid,他们的应...
  • badyflf
  • badyflf
  • 2012年10月22日 21:54
  • 2091

C/C++求职宝典21个重点笔记(常考笔试面试点)

这是我看过《C/C++求职宝典》一书做的笔记,都是一些笔试面试中常考的重点难点问题。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android面试点总结
举报原因:
原因补充:

(最多只允许输入30个字)