2023年Android开发一些重要知识点.pdf
《2023年Android开发一些重要知识点.pdf》由会员分享,可在线阅读,更多相关《2023年Android开发一些重要知识点.pdf(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、And r o i d开发网上的一些重要知识点1.an d r o i d 单实例运营方法我们都知道A n d ro id 平台没有任务管理器,而内部A p p 维护者一个ActMty histo r ys tac k 来实现窗口显示和销毁,对于常规从快捷方式运营来看都是s tartActivity也许会使用 F LAG_ACTI VITY_NEW_TASK标记来打开一个新窗口,比如L a uncher,所以考虑单任务的实现方法比较简朴,一方面A n droid 12 3 纠正下大家一种错误的方法就是直接在and r oidm a n i fest.xml 的 a p plic a t i o
2、 n 节点中加入 and r oid:l a un c h M o d e=sin g I e I nstanc e 这句,其实这样将不会起到任何作用,Ap p s 内部维护的历史栈作用于Activ i t y,我们必须在 act i v i ty 节点中加入 a ndr o id:launchMode=s i n glelnst a nee这句才干保证单实例,当然一般均加在主程序启动窗口的Activity。2.px像素如何转为dip设备独立像素最近有网友间如何将px像素转为dip独立设备像素,由于A n droid的设备分辨率众多,目前主流的为wv g a,而很多老的设备为hvga甚至低端的
3、q v g a,对于兼容性来说使用di p 无非是比较方便的,由于他和分辨率无关和屏幕的密度大小有关,所以推荐使用。px=(i nt)(d ip*d e nsi t y+0.5 f)这里a ndroid开发网提醒大家很多网友获取density(密度)的方法存在问题,从资源中获取的是静态定义的,一般为1.0 对于HVGA是正好的,而对于wvg a 这样的应当从Win d o wsMa n ag e r 中获取,WVGA为 1.5 这里可以再补充一下di p,s i p 的知识3.Androi d 中动态改变I mageView大小很多网友也许发现在1 ayou t.xm 1文献中定义了 Imag
4、eVi e w 的绝对大小后,无法动态修改以后的大小显示,其实Android平台在设计U I 控件时考虑到这个问题,为了适应不同的Drawa b 1 e 可以通过在x m 1的相关Im a g e View中加入andro i d:s c a I eType=fitXY这行即可,但由于使用了缩放也许会导致当前U I 有所变形。使用的前提是限制Im a geV i e w 所在的层,可以使用-一个内嵌的方法限制显示。4.如 何判断A n d ro i d 手机当前是否联网?假如拟开发一个网络应用的程序,一方面考虑是否接入网络,在 Android手机中判断是否联网可以通过Conn e cti v
5、i tyMan a g e r 类的isAvai 1 a ble()方法判断,一方面获取网络通讯类的实例 Conne c t i v i tyM a n a gercwjMana g e r=(Connectiv i t y Manager)getSyst e mServi c e(Context.CONNECTIVITY_SER VICE);,使用 cwjMa nage r.g e t Activ e Ne t wor k lnfo().i s A v ailab 1 e();来返回是否有效,假如为 True则表达当前An droid手机已经联网,也许是W iF i或 GPRS、HSDPA等
6、等,具体的可以通过C o n n e c tivi t yMa n a g er 类的 getActi v e Netw o r klnfo()方法判断具体的接入方式,需要注意的是有关调用需要加入这个权限,an droid开发网提醒大家在真机上Mark e t和 Browse r 程序都使用了这个方法,来判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手机上的电力资源。5.Drawable、Bitmap、C a nvas 和 Pain t 的关系很多网友刚刚开始学习And r o id平台,对于D r awa b Ie、Bitmap、Canva s 和 Pain t
7、它们之间的概念不是很清楚,其实它们除了 Drawa b le 外早在Sun的J2M E 中就已经出现了,但是在Android平台中,Bitmap Canva s 相关的都有所变化。一方面让我们理解下An d ro id平台中的显示类是Vi e w,但是还提供了底层图形类andro id.graphi c s,今天所说的这些均为graphi c s 底层图形接口。B i tmap-称作位图,一般位图的文献格式后缀为bmp,当然编码器也有很多如RGB 5 65、RGB888。作为一种逐像素的显示对象执行效率高,但是缺陷也很明显存储效率低。我们理解为一种存储对象比较好。Drawable-作为And
8、ro i d 平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、J P G,当然也支持B M P,当然还提供一些高级的可视化对象,比如渐变、图形等。Canvas-名为画布,我们可以看作是一种解决过程,使用各种方法来管理Bitmap.G L 或 者 Pa th途径,同时它可以配合Ma t rix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。P a int-我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。假如涉及一些Andro i d 游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应用。6.Act i v
9、ity切换导致的o n C re a t e 反复执行部分网友会发现A c t ivit y 在切换到后台或布局从横屏L ANDSCAP E切换到POR TRAIT,会重新切换Activity会触发一次onCreat e 方法,我们可以在and r o idm a nifes t.xml中的 activ i t 元素加入这个属性 a ndroi d:c onf i g Ch a n g e s=orientation|keyb oardHi d d en 即可,比如 vac t i v i ty andro id:nam e=and r o i d 123 a nd roi d:conf i
10、g C hange s=no r i e ntati o n|ke y boa r dHidden a n droi d:label=s tring/app_ name”,同时在 Activi t y 的 J ava 文献中重载 onCo n f i guratio n Cha nged(C o nf i gura t i o n n e wCo nfig)这个方法,这样就不会在布局切换或窗口切换时重载onCre a te 等方法。代码如下:j a va view pla i n c opyp r i nt?1.Ove r ride2.p ubl i c v o id onConfi g u
11、r ationChan ged(Configuratio n newC o n fi g)3.(4.su p e r.onCon f i g u r ati o n Chan ged(newCo nfig);5.if(this,g e tRe s ources().g e tC o n f igur a t i o n().o r ie n t ation=C o nf i gur a t i on.OR I ENTATION_LANDSC APE)6.(7./land8.)9.els e if(th i s.get R e sour c es().ge t Con f igurat i on
12、().orie n t ati on=Con f i gu r atio n.ORI E NT A TION_PORT R A IT)10.11./p o r t12.13.7.And r oid 的 ImageBu t ton 问题很多网友对And r oid提供的ImageButton有个疑问,当显示Drawab 1 e 图片时就不会再显示文字了,其实解决的方法有两种,第一种就是图片中就写入文字,但是这样解决会增长程序体积,同时硬编码方式会影响多国语言的发布。第二种解决方法很简朴,通过度析可以看至U Ima g e B ut t o n 的 layout,我们可以直接直接继承,添加一个T
13、e xtv i e w,对齐方式为右侧即可实现ImageButton支持文字右侧显示。8.Andro i d 代码优化技术1.J a va 内存控制 对于字符串操作而言假如需要连加这样的操作建议使用Str i n g Bui Ider,通过调试不难发现假如你的字符串每次连加,使用Strin g 需要的内存开销会远大于Strin g Builder,然后And r o id 手机常规的运营内存大约在12 8M B左右,对于运营多任务就需要考虑了,Android开发网提醒由于J av a 有G C 不需要手动释放那么分派的时候就要格外的小心,频繁的GC操作仍然是很影响性能的,在调试时我们可以通过l
14、ogcat查看内存释放情况。2.循环使用平时在访问一个属性的时候效率远比一个固定变量低,假如你的循环估计次数经常大于5,假设xxx.GetLength()方法的值一般大于5,推荐这样写,比如 f o r (i nt i=0;i x x x .Ge t L e ng t h();i+)这里 xxx.GetLen g th 在每次循环都要调用,必然会影响程序效率,在游戏开发中显得更为明显,改善的方法应当为intj=x x x.GetLe n gth()f or(i nt i=0;i j;i+)3.图片的优化 在 Android 平台中2 维图像解决库Bitmap F a c to ry 做的比较智
15、能,为了减少文献体积和效率,经常不用很多资源文献,而把很多小图片放在一个图片中,有切片的方式来完毕,在 J2M E 中我们这样是为了将少文献头而解决MIDP这些设备的问题,而 Android中虽然机型硬件配置都比较高,有关And roid G1硬件配置可以参考G1 手机参数以及评测,但是当资源多时这样的运营效率还是令人满意的,至少Da 1 vik优化的还不是很够。9.And r o id 开发进阶之NIO非阻塞包(一)对于Andro i d 的网络通讯性能的提高,我们可以使用J a v a 上高性能的NIO(N ewI/O)技术进行解决,N IO 是从JDK 1 .4开始引入的,NI。的 N
16、我们可以理解为Noblockin g 即非阻塞的意思,相相应传统的I/O,比如So cket的 accpet()、re a d。这些方法而言都是阻塞的。NIO重要使用了 C h a n n e l和 Selec t o r 来实现,J a va 的Sel ector类似Wins o ck的 S e le c t模式,是一种基于事件驱动的,整个解决方法使用了轮训的状态机,假如你过去开发过Symbian应用的话这种方式有点像活动对象,好处就是单线程更节省系统开销,N 1。的好处可以很好的解决并发,对于An droid网游开发来说比较关键,对于多点Soc k e t连接而言使用NIO可以大大减少线程
17、使用,减少了线程死锁的概率,毕竟手机游戏有U I 线程,音乐线程,网络线程,管理的难度可想而知,同时I/O这种低速设备将影响游戏的体验。N I O 作为一种中高负载的1/0 模型,相对于传统的B IO(Block i ng I/O)来说有了很大的提高,解决并发不用太多的线程,省去了创建销毁的时间,假如线程过多调度是问题,同时很多线程也许处在空闲状态,大大浪费了 CPU时间,同时过多的线程也许是性能大幅下降,一般的解决方案中也许使用线程池来管理调度但这种方法治标不治本。使用NIO可以使并发的效率大大提高。当然N IO 和 JDK 7 中的A IO 还存在一些区别,A I 0 作为一种更新的当然这
18、是对于Java而言,假如你开发过Wins o ck服务器,那 么 10 C P 这样的I/0 完毕端口可以解决更高级的负载,当然了今天Androi d 123重要给大家讲解下为什么使用N I 0 在 An d r。i d 中有哪些用处。NIO我们分为几个类型分别描述,作为J a v a 的特性之一,我们需要了解一些新的概念,比如ByteB u f f er类,C hannel.S oc k etChan n el,Serve r S oc k etChannel,Sei e ct o r 和 Selection Key。有关具体的使用,And r。i d 开发网将在明天具体讲解。网友可以在An
19、d r o id S D K 文档中看下j a v a.n i o 和 jav a.nio.c h an n el s 两个包了解。了解下这种技术,看看在立即要做的项目中是否用得到10.Android T h em e和 Sty 1 e s 内部定义解析昨天我们讲到的有关在Andr o i d Manif e st.xml中定义A c tivity的 t h e m e 方法来实现无标题的方法,在便用xml让你的A c tiv ity 无h 一文中讲到的,很多网友不明白为什么这样做淇实在And r。id 123以前的文章中多次提到了 styles样式定义方法,今天Android开发网再次把一些
20、网友回顾了解下an droid样式的内部定义。在一个工程的re s/v al u es/theme.xm 1 中我们可以方便的定义自己的风格主题,比如下面的cwjTheme中我们使用了基于andr o i d 内部的白色调的背景Theme.L i ght,设立windowsNoTItle为 t ru e 代表没有标题,背景颜色我们使用了 and ro i d 内部定义的透明,同时设立I i stView控件的样式为cwjListVi e w,x m l样式代码如下:html v iew plain c opyprin t?1.2.3.4.true5.a ndr oid:color/tr a n
21、spar e nt6.sty 1 e/c wjListVi ew7.有关ListView控件我们自定义的风格就是修改下系统1istview这个控件的每行分隔符样式,这里我们在工程下res/d raw a bIe文献夹下放一个图片名为list_ s e le cto r 图片,这样我们的cw j Li stVj e w 的代码可以这样写style n a me=cwjListView”parent=Man d roid:s t y 1 e/Widget.Lis t Views8.dr a wable/lis t _s elec t or9.10.通过定义sty I e 可以设立更多,比如让cwj
22、ListV i ew 的字体颜色就加入textAppearance属性,比如a n d roid:style/TextAppeara n c eA 1 I.Andr o i d JSON解析示例代码来自Goo g Ie官方的有关Androi d 平台的JSON解析示例,假如远程服务器使用了 j son而不是xm l的数据提供,在A n droid平台上已经内置的org.j s。n 包可以很方便的实现手机客户端的解析解决。下面An droid 123 一起分析下这个例子,帮助Androi d 开发者需要有 关 H T T P 通讯、正则表达式、J S O N 解析、appWidget开发的一些知
23、识。Ejava view p lainc o pypri n t?1.publ i c c I a ss WordWidget ext e n d s Ap p WidgetP rovid er /appWi d g et2.O v e r r id e3.p u blic v o id onUpdate(C onte x t context,A p pWidge tManager a P pWid g etM a nager,4.int L a ppWidgetlds)5.c o nte x t.startServi c e(new Inte n t(context,U p dateSe r
24、v ic e.c 1 a s s);/避免ANR,所以Widget中开了个服务6.publi c s t a tic c la s s Upd a t eSer v i c e e x ten d s Ser v ice 7.Over r id e8.public vo i d o n Start(lnte nt in t ent,int s t ar t Id)9./Build the wi d get upd a te for t o day10.R e mote View s u pdat e Views=b u i I d Upda t e(t his);Com p onen t Na
25、m e thi s W i dget=n e w C o m ponen t Nam e(th i s,Wo r d W i d g e t.c 1 a s s);11.A p pWidg e t Manager man a ger=AppWj d getM a nager.ge t Ins t ance(this);12.m a nager.up d a te A p p W i dge t(th i s Widget,u p date Views);13.public RemoteVi e ws b u i 1 dUpd a t(Context context)14./Pic k out
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 Android 开发 一些 重要 知识点
限制150内