Android 经验分享

      搞Android已经两年了,之前一直在eoe上面写文章,竟然没有写一篇CSDN的文章,真的很惭愧,从今天希望自己可以坚持下去,把每天的收获都可以保存起来,同时也分享给大家,希望大家有用!不说废话了,我先写几条我自己工作中的一些经验吧!

   

       1、  推荐一个网站---极客学院(http://www.jikexueyuan.com/),里面推出了一系列的视频教程(移动应用开发,移动游戏开发,后端开发,前端开发,智能硬件,物联网,操作系统,数据库,图像技术等的),包含了当下最新的技术,最实用的是里面讲了很多知识体系归纳和一些项目实战讲解,有些问题可以直接在极客学院里面的论坛或者社区进行讨论(eoe社区),当然里面视频并不是全部免费的。

     2.异常处理机制的使用。写一个异常处理类implement UncaughtException,可在Application中初始化这个类,这样在全局中我们便能得到应用程序抛出的任何异常,并可将这个异常以流的形式打印或者保存在本地,在适当的时候,如果我们用友盟做数据统计了,可以将我们的错误信息上传至服务器,来统计我整个应用的稳定性。

    3.BaseActivity的使用。在应用开发中,如果有多个Activity,应该写一个BaseActivity,在BaseActivity里面可封装跳转页面的方法,Toast的方法,弹出对话框的方法,标题的操作公共方法,其他Activity继承此BaseActivity即可。

 

   4.Android内存优化。Android内存泄露很容易导致内存溢出,我们称之为OOM,我有这样的一些内存优化策略,1)在循环中尽量不要使用局部变量 2)不用的对象把它置为null 3)数据库的cursor及时关闭4)构建adapter时候要使用缓存contentview 5)调用registerReceiver()注册广播时别忘记在相对应的生命周期方法里面调用unregisterReceiver() 6)及时关闭输入流和输出流7)多张图片尽量使用Lrucache或者软应用,较大的图片可以通过BitmapFactory缩放之后再使用,注意recycle.  8)尽量避免static变量引用资源耗费过多的实例。

  

      5.Android缓存机制。使用缓存机制可以为用户节省更多的数据流量,同时在用户体验上面也会很好,当第一个加载过后,第二次会相当流畅,缓存主要包含文字缓存和多媒体缓存(图片,视频),文字缓存,1)可将从服务器上得到的json数据或者xml数据先保存到sd卡中,并在数据库中添加记录,注意需要添加两个关键字段,一个是请求的url,一个是本地保存的路径,每次加载数据之前先根据url检索是否存在,若存在直接从sd卡取出。2)可先将数据解析出来,全部写入数据库,以后向服务器发请求之前先从数据库检索,然后直接返回集合等形式。图片缓存,同文字缓存第一种相似,采用当前时间+日期作为图片的名字进行缓存,并保存相应的数据库记录,从服务器取出之前先检索数据库。有一个问题,缓存了这么多图片和文字,如何删除这些缓存呢,1)在页面提供删除缓存的按钮,点击删除,可删除所有的缓存内容  2)在每一个客户端手动更新或者自动更新时候,删掉原来所有的缓存文件,重新下载新的文件进行缓存。

  

      6.ANR避免,在一些网络访问中或者很耗时的操作中都会很容易造成ANR,当一个事件的响应时间超过5秒,intentReceiver(意向接收器)超过10秒仍未执行完毕,就会引发ANR了,它有这样的几种解决方案:1)AsyncTask异步任务,在异步任务里面doInBackground()和onPostExecute(Result)两个方法非常重要,doInBackground()这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如一访问网络,下载大量数据,解析xml时,这个方法必须重载。onPostExecute(Result)这个方法运行于UI线程中,在doInBackgroud(Params…)方法执行完毕之后调用,主要用于刷新UI的操作,中的参数Result即后台任务做完之后带回来的结果。2)Thread+Handler, 说到这里了,不得不提一下Handler机制,一个Handler允许你发送和处理Message和Runable对象,每个线程都有自己的Looper,每个Looper中都封装着MessageQueeue(消息队列),Looper主要是负责不断的从自己消息队列里面取出队头的任务或消息执行。每个Handler也和线程相互关联,Handler负责把Message和Runable对象传递个MessageQueeue(用post或者sendMessage等方法),而在这些对象离开MessageQueeue的时候,Handler负责执行它们(用handlerMessage方法)。其中Message就定义了一个信息,这个信息里面包含了一个描述符合任意类型的数据对象,这个信息被用来传递Hnadler.Message对象提供额外的两个int域和一个Object域。

     

      7.屏幕分辨率的自适应。现在市场上的android手机分辨率可以说是参差不齐,开发过程中,很容易遇到适配的问题,易导致效果在不同的手机上效果不一样,我们可以用两种方式进行不同手机的适配,一种是在java代码中,另外一种就是在xml文件中,第一种java代码适配,在我们适配上,虽然有着不同分辨率的手机,但他们都有固定的屏高和屏宽,可以根据宽高作为判断条件,但这种方式,要看适配的布局中,各种控件多不多,如果太多,并不适合用这种方法,因为判断太多,代码显得很长,在修改过程中,也显得很麻烦,所以我们一般的还是采用第二种方案,在xml里面适配时候,最好可以通过权重(layout_weight)的方式来分配每个组件的大小,也可以通过具体的像素(dip)来确定大小,在布局中我们通常喜欢使用线性布局(LinearLayout),而在布局中最好使用相对布局(Relativelayout),当然相对布局写起来比较麻烦一点,需要考虑到自己所有控件的布局,放置图片有drawable-hdpi,dreawable-mdpi,drawable-ldpi分别代表分辨率480*800,360*480,240*360,放置图片相差1.5倍,如果需要自适应,需要在AndroidMainfest.xml文件里面加入这一段。

<supports-screens

      android:smallScreens="true"

      android:normalScreens="true"

      android:largeScreens="true"

      android:anyDensity="true"/>

在使用图片的时候,.9.png也是可以实现自适应的。制作.9.png图片可通过ps制作,也可通过sdk下的tools工具进行制作。

  

    8.android5.0新技术。新的技术总是不断更新迭代的,5.0不仅从设计还有技术上面都有了很大的改变,它带来了一种全新的Material Design设计风格,即一种扁平化的设计,看起来更

加的时尚,用户的体验更好了(http://www.uisdc.com/comprehensive-material-design-note),

新特性地址:http://www.tuicool.com/articles/RzUJRfj;这是android5.0的一些新的特性,那么这些新的特性之后也包含了一些新的技术, 1)包含了Material主题,它主要提供了可以让你设置调色板的系统控件,为控件设计的触摸反馈动画,Activity过渡动画。2)Palatte,是一种动态色彩,可以根据图片来决定标题的颜色和标题栏的背景色,在视觉上会更有冲击力和新鲜感,而不是统一的色调,显得很呆板。3)AnimatedVectorDrawable,这个主要的作用是可以在做动画的时候使用到,它最大的特点是可以在不失清晰度的情况下进行缩放,而你仅仅只需要一个矢量图片(矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等)的资源文件。4)RecyclerView,它是一个可以替代ListView的新的控件,也可以说它是listview的升级版,它比listview更先进更灵活,主要体现在:首先它给每个条目位置提供了一个布局管理器(RecyclerView.setLayoutManager),其次它为每个条目设置了操作动画(RecyclerView.setItemAnimator)5) 动画:第一中是Activity的过渡动画,包含进入,退出,共享元素,可在xml文件中配置,也可以在代码中配置。第二种就是触摸反馈,揭露效果,曲线运动,视图状态改变,触摸反馈(http://blog.csdn.net/ljx19900116/article/details/41806917)。

   

    第一次在这上面写文章,希望大家可以多多支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值