android关键知识

简介:

1、handler 与Looper 与MessageQueue 、Message关系

 handler:是处理主线程(ui线程)处理耗时操作的线程,通过post message到MessageQueue队列中。使用handler须要实现 handlerMessage方法,通过更新主线程ui

Looper:每一个Looper相应一个MessageQueue,在handler之前Looper.prepare()会初始化looper和MessageQueue。最后Looper.loop方法会去循环分发message到指定的handler,改api方法中有一句 msg.target.dispatchMessage(msg);   这就是looper和handler之间的调用


2、hander与 AsyncTask的优缺点 

AsyncTask实现的原理和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步运行的程度(能够通过接口实现UI进度更新),最后反馈运行的结果给UI主线程.

使用的长处:

简单,快捷

过程可控      

使用的缺点:

在使用多个异步操作和并须要进行Ui变更时,就变得复杂起来.


Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)执行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进行UI变更。

使用的长处:

结构清晰,功能定义明白

对于多个后台任务时。简单,清晰

使用的缺点:

 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)



3、android里面几种常见的存储方式

  a、Content provider

            1) ContentProvider为存储和读取数据提供了统一的接口

            2) 使用ContentProvider,应用程序能够实现数据共享

            3) android内置的很多数据都是使用ContentProvider形式,供开发人员调用的(如视频,音频。图片,通讯录等)

           首先在Androidmanifest.xml中注冊provider权限,然后通过getContentResolver() 然后得到contentResolver()对象 能够对该应用进行类似数据库操作一样的增删改成,须要的參数是uri  和參数值,查询一般得到游标Cursor  通过遍历游标获取属性值

  b、SharedPreferences

  实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences经常使用来存储一些轻量级的数据. 通过getSharedPreferences()得到改SharedPreferences对象  然后得到edit对象用来put值到改对象中。最后须要edit.commit()来将改对象存储到文件里,最后是以文件形式保存在data/data的指定路径下

  c、sqlite存储 

  SQLite是一种轻量级的小型数据库,尽管比較小,可是功能相对照较完好,一些常见的数据库基本功能也具有,在如今的嵌入式系统中使用该数据库的比較多。由于它占用系统资源非常少

   须要继承SQLiteOpenHelper 然后helper.getWritableDatabase() 得到SQLiteDatabase 对象,该对象能够对数据进行增删改查操作,提供了key value形式的CURD方法

  d、io流存储

 

  e、webview网络存储

4。listview你是怎么优化的。

用viewHolder和convertview优化内存,降低view的实例化个数,当item1被滑出屏幕时。这时不须要创建新的item1的view实例,android里面提供了Recycler(重复循环器)构件,并且viewHolder是静态类,最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时又一次使用就可以。

4.1,listview图片载入优化

1. decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完毕decode。
无需再使用java层的createBitmap,从而节省了java层的空间,而且设置图片的压缩比例,从而缩小内存使用

InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; //width。hight设为原来的十分一
Bitmap btp =BitmapFactory.decodeStream(is,null,options);,
2.回收图片缓存

 if(!bmp.isRecycle() ){
bmp.recycle() //回收图片所占的内存
system.gc() //提醒系统及时回收
}



5,view的刷新,之前说过

      View 能够调用invalidate()和postInvalidate()这两个方法刷新

6,IPC及原理


7,Android多线程


8。Android为什么要设计4大组件,他们之间的联系。不设计行不行(主要是为了实现MVC模式。然而java中最难的模式也是这个,非常少有产品能将这个模式做得非常好【Technicolor的面试官问的这个】)


9,service的周期。activity的周期,谈下你对Android内部应用的了解,比方他做电话,以及联系人等等应用。框架层有非常多东西还是多看看。熟悉Android怎么做的,无论你做应用程开发还是应用框架层开发非常有优点。


版权声明:本文博客原创文章。博客,未经同意,不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4750555.html,如需转载请自行联系原作者


相关文章
|
8月前
|
Kubernetes 监控 Cloud Native
快速部署YuniKorn开启全能管理与调度器
本文介绍了YuniKorn的基本信息,并通过阿里云计算巢完成了YuniKorn的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动YuniKorn,非技术同学也能轻松搞定。
|
Kubernetes 监控 开发者
|
10月前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
Java 消息中间件 Spring
浅析RabbitMQ死信队列
浅析RabbitMQ死信队列
296 0
|
11月前
|
SQL Java 数据库连接
Pagehelper超级好用的分页插件
Pagehelper超级好用的分页插件
1946 0
|
机器学习/深度学习 人工智能 算法
操作系统调度算法的演变与性能分析
操作系统作为计算机硬件和软件之间的桥梁,其调度算法的效率直接影响到系统的响应速度和资源利用率。本文将探讨从简单到复杂的各类调度算法,包括先来先服务、短作业优先、轮转法以及多级反馈队列等,通过数据分析揭示各算法的性能特点,并结合现代操作系统设计的需求,讨论未来调度算法的发展趋势。
|
存储 数据库 Python
使用Python编写代理IP自动切换技巧
使用Python编写代理IP自动切换技巧
205 0
【Leetcode 2583】二叉树中的第K大层和 —— 优先队列 + BFS
解题思路: - 使用队列保存节点,按层序依次保存该层节点 - 使用优先队列保存每层节点值的总和,最后剔除前k个大数即可得到
|
Ubuntu Docker 索引
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
ubuntu 20.04 安装docker教程和安装中遇到的问题解决方案(超详细 附加图文教程)
2739 0
|
物联网 Android开发
Android Ble蓝牙App(四)UI优化和描述符
Android Ble蓝牙App(四)UI优化和描述符
331 0

热门文章

最新文章