没有合适的资源?快使用搜索试试~ 我知道了~
2023年Android开发一些重要知识点.doc
0 下载量 133 浏览量
2022-11-05
21:34:55
上传
评论
收藏 265KB DOC 举报
温馨提示
试读
88页
2023年Android开发一些重要知识点.doc
资源推荐
资源详情
资源评论
Android
开发网上的一些重要知识点
1. android单实例运营方法
我们都知道Android平台没有任务管理器,而内部App维护者一个Activity history
stack来实现窗口显示和销毁,对于常规从快捷方式运营来看都是startActivity也许会使用F
LAG_ACTIVITY_NEW_TASK标记来打开一个新窗口,比如Launcher,所以考虑单任务的
实现方法比较简朴,一方面Android123纠正下大家一种错误的方法就是直接在androidman
ifest.xml的application节点中加入android:launchMode="singleInstance"这句,其实这样将
不会起到任何作用,Apps内部维护的历史栈作用于Activity,我们必须在activity节点中加入
android:launchMode="singleInstance"
这句才干保证单实例,当然一般均加在主程序启动窗口的Activity。
2. px像素如何转为dip设备独立像素
最近有网友问如何将px像素转为dip独立设备像素,由于Android的设备分辨率众多,目前
主流的为wvga,而很多老的设备为hvga甚至低端的qvga,对于兼容性来说使用dip无非是
比较方便的,由于他和分辨率无关和屏幕的密度大小有关,所以推荐使用。 px= (int)
(dip*density+0.5f)
//这里android开发网提醒大家很多网友获取density(密度)的方法存在问题,从资源中获取
的是静态定义的,一般为1.0对于HVGA是正好的,而对于wvga这样的应当从WindowsMa
nager中获取,WVGA为1.5 这里可以再补充一下dip,sip的知识
3. Android中动态改变ImageView大小
很多网友也许发现在layout.xml文献中定义了ImageView的绝对大小后,无法动态修改以后
的大小显示,其实Android平台在设计UI控件时考虑到这个问题,为了适应不同的Drawabl
e可以通过在xml的相关ImageView中加入android:scaleType="fitXY"
这行即可,但由于使用了缩放也许会导致当前UI有所变形。使用的前提是限制ImageView
所在的层,可以使用一个内嵌的方法限制显示。
4. 如何判断Android手机当前是否联网?
假如拟开发一个网络应用的程序,一方面考虑是否接入网络,在Android手机中判断是否联
网可以通过 ConnectivityManager
类的isAvailable()方法判断,一方面获取网络通讯类的实例 ConnectivityManager
cwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVI
CE); ,使用cwjManager.getActiveNetworkInfo().isAvailable();
来返回是否有效,假如为True则表达当前Android手机已经联网,也许是WiFi或GPRS、H
SDPA等等,具体的可以通过ConnectivityManager 类的getActiveNetworkInfo()
方法判断具体的接入方式,需要注意的是有关调用需要加入<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
这个权限,android开发网提醒大家在真机上Market和Browser程序都使用了这个方法,来
判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手
机上的电力资源。
5. Drawable、Bitmap、Canvas和Paint的关系
很多网友刚刚开始学习Android平台,对于Drawable、Bitmap、Canvas和Paint它们之间的
概念不是很清楚,其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在And
roid平台中,Bitmap、Canvas相关的都有所变化。
一方面让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.gr
aphics,今天所说的这些均为graphics底层图形接口。 Bitmap -
称作位图,一般位图的文献格式后缀为bmp,当然编码器也有很多如RGB565、RGB888
。作为一种逐像素的显示对象执行效率高,但是缺陷也很明显存储效率低。我们理解为一
种存储对象比较好。 Drawable -
作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,
当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。 Canvas -
名为画布,我们可以看作是一种解决过程,使用各种方法来管理Bitmap、GL或者Path途径
,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪
、选取等操作。 Paint -
我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色
、样式。
假如涉及一些Android游戏开发、显示特效可以通过这些底层图形类来高效实现自己的应
用。
6. Activity切换导致的onCreate反复执行
部分网友会发现Activity在切换到后台或布局从横屏LANDSCAPE切换到PORTRAIT,会重
新切换Activity会触发一次onCreate方法,我们可以在androidmanifest.xml中的activit元素
加入这个属性android:configChanges="orientation|keyboardHidden" 即可,比如 <activity
android:name=".android123" android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
同时在Activity的Java文献中重载onConfigurationChanged(Configuration
newConfig)这个方法,这样就不会在布局切换或窗口切换时重载onCreate等方法。代码如
下:
[java] view plaincopyprint?
1. @Override
2. public void onConfigurationChanged(Configuration newConfig)
3. {
4. super.onConfigurationChanged(newConfig);
5. if (this.getResources().getConfiguration().orientation == Configuration.ORI
ENTATION_LANDSCAPE)
6. {
7. //land
8. }
9. else if (this.getResources().getConfiguration().orientation == Configuration.
ORIENTATION_PORTRAIT)
10. {
11. //port
12. }
13. }
7. Android的ImageButton问题
很多网友对Android提供的ImageButton有个疑问,当显示Drawable图片时就不会再显示文
字了,其实解决的方法有两种,第一种就是图片中就写入文字,但是这样解决会增长程序
体积,同时硬编码方式会影响多国语言的发布。第二种解决方法很简朴,通过度析可以看
到ImageButton的layout,我们可以直接直接继承,添加一个TextView,对齐方式为右侧即
可实现ImageButton支持文字右侧显示。
8. Android代码优化技术
1.Java内存控制
对于字符串操作而言假如需要连加这样的操作建议使用StringBuilder,通过调试不难发现
假如你的字符串每次连加,使用String需要的内存开销会远大于StringBuilder,然后Androi
d手机常规的运营内存大约在128MB左右,对于运营多任务就需要考虑了,Android开发网
提醒由于Java有GC不需要手动释放那么分派的时候就要格外的小心,频繁的GC操作仍然
是很影响性能的,在调试时我们可以通过logcat查看内存释放情况。 2.循环使用
平时在访问一个属性的时候效率远比一个固定变量低,假如你的循环估计次数经常大于5
,假设xxx.GetLength()方法的值一般大于5,推荐这样写,比如 for(int
i=0;i<xxx.GetLength();i++)
这里xxx.GetLength在每次循环都要调用,必然会影响程序效率,在游戏开发中显得更为
明显,改善的方法应当为 int j=xxx.GetLength() for(int i=0;i<j;i++) 3.图片的优化
在Android平台中2维图像解决库BitmapFactory做的比较智能,为了减少文献体积和效率
,经常不用很多资源文献,而把很多小图片放在一个图片中,有切片的方式来完毕,在J2
ME中我们这样是为了将少文献头而解决MIDP这些设备的问题,而Android中虽然机型硬件
配置都比较高,有关Android
G1硬件配置可以参考G1手机参数以及评测,但是当资源多时这样的运营效率还是令人满
意的,至少Dalvik优化的还不是很够。
9. Android开发进阶之NIO非阻塞包(一)
对于Android的网络通讯性能的提高,我们可以使用Java上高性能的NIO (New I/O)
技术进行解决,NIO是从JDK
1.4开始引入的,NIO的N我们可以理解为Noblocking即非阻塞的意思,相相应传统的I/O,
比如Socket的accpet()、read()这些方法而言都是阻塞的。
NIO重要使用了Channel和Selector来实现,Java的Selector类似Winsock的Select模式,
是一种基于事件驱动的,整个解决方法使用了轮训的状态机,假如你过去开发过Symbian
应用的话这种方式有点像活动对象,好处就是单线程更节省系统开销,NIO的好处可以很
好的解决并发,对于Android网游开发来说比较关键,对于多点Socket连接而言使用NIO可
以大大减少线程使用,减少了线程死锁的概率,毕竟手机游戏有UI线程,音乐线程,网络
线程,管理的难度可想而知,同时I/O这种低速设备将影响游戏的体验。
NIO作为一种中高负载的I/O模型,相对于传统的BIO (Blocking
I/O)来说有了很大的提高,解决并发不用太多的线程,省去了创建销毁的时间,假如线程
过多调度是问题,同时很多线程也许处在空闲状态,大大浪费了CPU时间,同时过多的线
程也许是性能大幅下降,一般的解决方案中也许使用线程池来管理调度但这种方法治标不
治本。使用NIO可以使并发的效率大大提高。当然NIO和JDK
7中的AIO还存在一些区别,AIO作为一种更新的当然这是对于Java而言,假如你开发过Wi
nsock服务器,那么IOCP这样的I/O完毕端口可以解决更高级的负载,当然了今天Android1
剩余87页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3607
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功