项目小结与面试

这篇博客总结了Android开发中的关键点,包括图片上传的清晰度处理、APP登录过程的数据安全、使用Android兼容包的新控件、界面自适应、ListView复杂item的管理、进程与线程的理解、应用版本升级流程、手势识别、自定义控件的实现以及处理ScrollView与GridView的焦点冲突问题。此外,还涉及到时间格式、拨打电话权限和访问手机通讯录的操作。

1.图片上传时保证清晰度:

https://github.com/android-cn/android-discuss/issues/285

  压缩图片算法:一、拍照的图一般是png格式,转换为jpg的。
                             二、压缩jpg图片。原先4000k+的图片,可以压缩到80k左右,显示效果基本没有影响。原理类似把临近像素点集合成一个。
  或者用不到什么高大上的算法,根据个人经验,就像@wangqiankun 所写的:
                1.缩小图片尺寸,720px的图片就够大了;
                2.图片格式保存成jpg,Bitmap.compress的时候,质量比参数设成80,甚至更小都可以;


2.关于APP登录过程数据安全:

  标准做法是不存储密码及密码的加密形式;而是保存token,这个需要服务器支持OAuth 2.0协议。
  https协议(不全部支持),MD5加密数据。


3.一个Demo学会用Android兼容包新控件:

http://sunjiajia.com/2015/07/02/android-new-widgets-demo/?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1


4.关于自适应:

              AutoLayout for Android

              https://github.com/DTHeaven/AutoLayout-Android


5.ListView中item的view种类很多,怎么处理?

  例子:Android ListView实现类似朋友圈的复杂布局,多种类型的布局组合在一起。动态为Feed类,被拆分为HeadEntry,BodyEntry,ImageEntry,BottomEntry等这几个Entry都继承BaseEntry,然后BaseAdapter里面List为List。由于Adapter可以使用多种布局,所以这里采用的方式是将单个信息 的布局拆分为多个ListView的item来达到优化的目的。
        http://blog.youkuaiyun.com/nightyk/article/details/45057777


6.进程与线程:

      http://hukai.me/android-notes-process-and-thread/



7.app版本升级是如何做的?

  一。1.服务器提供更新接口 getNewVersion()返回JSON {"url":"http://.../**.apk","versionCode":"2","versionName":"2.0", "md5","1234...1234"}
          2.客户端 获取 mVersionCode = 1 < 2 , 有新版本。
          3.通过URL下载apk到本地。
          4.获取apk完整性,md5比较。
          5.进行升级安装。
 二:仅通过商店更新
 三:如果项目用到了友盟的SDK,直接用友盟还是挺方便的,不过友盟提供的更新UI很难看!但可以自定义


8.手势

  按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
  抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。
  长按(onLongPress): 手指按在持续一段时间,并且没有松开。
  滚动(onScroll): 手指在触摸屏上滑动。
  按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
  抬起(onSingleTapUp):手指离开触摸屏的那一刹那。


  任何手势动作都会先执行一次按下(onDown)动作。
  长按(onLongPress)动作前一定会执行一次按住(onShowPress)动作。
  按住(onShowPress)动作和按下(onDown)动作之后都会执行一次抬起(onSingleTapUp)动作。
  长按(onLongPress)、滚动(onScroll)和抛掷(onFling)动作之后都不会执行抬起(onSingleTapUp)动作。


9.自定义控件

  自定义控件:measure;draw;layout
  1.继承我们的View或者是View的子类
  2.初始化画笔Paint
  3.重写onDraw画出界面
  4.响应用户的触摸事件
  自定义控件:
  1.继承系统的控件(View),然后去修改
  2.用系统提供的几个控件组合形成新的效果
  

10.scrollView里面有顶部图片,和gridView,如果出现顶部图片显示不全的情况,可能因为两部分争焦点,设置焦点不在gridView上就可以了。   



11.时间的格式

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String t = format.format(new Date(time));
return t;   


12.<!-- 拨打电话的权限 -->

<uses-permission android:name="android.permission.CALL_PHONE" />
呼叫指定的电话号码。
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL); 
intent.setData(Uri.parse("tel:10086");
startActivity(intent);
调用拨号面板
Intent intent=new Intent();
intent.setAction(Intent.ACTION_DIAL); 
intent.setData(Uri.parse("tel:10086");
startActivity(intent);


13.调手机通讯录

<!-- 获取手机通讯录的权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("vnd.android.cursor.dir/phone");
// intent.setAction(Intent.ACTION_GET_CONTENT);
// 设置Intent Type属性,主要是获取通讯录的内容
// intent.setType("vnd.android.cursor.item/phone");
startActivity(intent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值