android面试总结1

以下是本人近期面试中面试官问到的问题,在网上搜集了一番,做个记录,以后看起来也方便。
1.xml三种解析方式:dom,sax,pull(推荐使用)
总结:三种方式的总结比较
SAX 是一个用于处理XML事件驱动的“推”模型, 
优点: 是一种解析速度快并且占用内存少的xml解析器,它需要哪些数据再加载和解析哪些内容。 stringbuilder.apppend,可以随时解析节点,添加节点
缺点: 是它不会记录标签的关系,而要让你的应用程序自己处理,这样就增加了你程序的负担。
DOM 是一种文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。 
优点 :Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。 
缺点 :是DOM解析XML文件时,会将XML文件的所有内容以文档树方式存放在内存中。
Pull 解析和Sax解析很相似,Pull解析和Sax解析不一样的地方是pull读取xml文件后触发相应的事件调用方法返回的是数字,还有pull可以在程序中控制想解析到哪里就可以停止解析。while循环,可以随时改变条件退出循环
DOM方式 最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合在移动终端系统中使用,因为相比DOM占用内存少,适合处理比较大的XML文档,最后的Pull方式使用场合和SAX类似,但是更适合需要提前结束XML文档解析的场合。
----------------------------------------------------------------------------------
2. json解析
JSON文件就相当于是一个数组
解析JSON文件就相当于遍历存储JSON对象的数组JSONArray,获取每个JSONObject的数据,并封装到javabean中
JSON的优缺点:
优点:
作为数据传输格式,跟XML类似,但是比XML更加轻巧
由于JSON是JavaScript的原生格式,所以JSON不需要包含特定内容的首部信息
缺点:
语法过于严谨
代码可读性差
其eval函数存在风险
-----
使用第三方开源库,Gson,FastJson,JackJson。项目中用到Gson
1.引用Gson 2.6.1 版本jar包
2.toJson(对象参数),将对象转化成json字符串
3.fromJson(jason字符串参数,对象参数),将json字符串转换成对象
-----------------------------------------------------------------------------------------
3.动画

补间动画:
局限性
1.它只是重回了动画,并不具有交互性,不能做交互的动画效果;
2.由于animation动画框架是不断的调取ondraw方法进行重回,多以很费cpu资源。
-----------------------------------
帧动画
放电影
-----------------------------------
属性动画
第一种用法 ObjectAnimator 继承自 ValueAnimator
ObjectAnimator animatorA = ObjectAnimator. ofFloat ( iv , "TranslationX" , - 300 , 300 , 0 );
animatorA.star(),异步执行属性动画
-----------------------------------
第二种用法:
PropertyValuesHolder p1=PropertyValuesHolder.ofFloat("TranslationX",0f,300f);
ObjectAnimator.ofPropertyValuesHolder(iv,p1).setDuration(1000).start();
-----------------------------------  
AnimatorSet用法
//AnimatorSet 用法
ObjectAnimator animatorA = ObjectAnimator. ofFloat ( iv , "TranslationX" , 0 , 300f );
ObjectAnimator animatorAA = ObjectAnimator. ofFloat ( iv , "TranslationY" , 0 , 300f );
ObjectAnimator animatorB = ObjectAnimator. ofFloat ( iv , "scaleY" , 0.5f , 1.5f );
ObjectAnimator animatorC = ObjectAnimator. ofFloat ( iv , "rotation" , 0 , 270 );
AnimatorSet animatorSet= new AnimatorSet();
animatorSet.playTogether(animatorA, animatorAA,animatorB, animatorC); //同时播放
//animatorSet.playSequentially(animatorA, animatorB, animatorC);//顺序播放
// animatorSet.play(animatorA).after(animatorC).before(animatorB);//翻转c->移动a ->缩放b。执行动画a,在动画c之后,在动画b之前,b动画在C之后

animatorSet.setDuration( 1000 );
animatorSet.start();
-----------------------------------
动画监听器
1.new Animator. Animatorlistener (系统给我们补充好多多余的方法)
animatorA.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {

}

@Override
public void onAnimationEnd(Animator animation) {

}

@Override
public void onAnimationCancel(Animator animation) {

}

@Override
public void onAnimationRepeat(Animator animation) {

}
});
2.new AnimatorListenerAdapter (只需要实现我们需要实现的方法即可,比如动画结束时执行一个Toast)
animatorA.addListener( new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
Toast. makeText (SecondActivity. this , "over" , Toast. LENGTH_SHORT ).show();
}
});
-----------------------------------
插值器 设置怎么实现动画 animator.setInterpolator(new 动画插值器)
(卫星菜单的应用)
-----------------------------------
ValueAnimator (相当于定时器的动画效果,从0-100)
public void click(View view) {
if (view.getId() == R.id. tv ) {
ValueAnimator animator = ValueAnimator. ofInt ( 0 , 100 );
animator.setDuration( 5000 );
animator.addUpdateListener( new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Integer i = (Integer) animation.getAnimatedValue();
tv .setText( "" + i);
}
});
animator.start();
}
}
-------------------------------------------------------------------------------------------
4.利用广播监听手机电量(考点:动态注册广播,onDestory中要取消注册广播)
private void useBroadCoastListenLevel() {
//利用广播监听手机电量 并显示
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
//动态注册广播
receiver = new BatteryReceiver();
registerReceiver( receiver , intentFilter);
}

public class BatteryReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int level = intent.getIntExtra("level", 0);
tvB.setText("当前电量:" + level+"%");
if (level < 30) {
tvB.setText("电量小于:" + level + "% 请充电");
}
}
}
}
----------- 切记--------------
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值