android开发技巧小结(1-10)

一:日期问题

在实际的android开发中,经常会遇到对日期的处理,比如当需求需要显示的是某月某日星期几这样的textview文本时,我们可以通过系统提供的api来很容易解决:

DateFormat longFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

2016年5月30日 星期一 中国标准时间00:00:00       华为
2016年5月30日星期一 中国标准时间上午12:00:00   小米

但是通过该方法拿到的日期华为和其他手机不同,最开始我是通过截取的方式,截取小米,三星,oppo都没问题,显示的是“5月30日星期一”。于是app就上线了,悲催的是,这个截取竟然在华为上面发生了崩溃。华为手机在星期的前面多了一个空格。

二:TextView 去除多个连续空格

有这样一个需求,在文章列表的页面,显示标题以及内容,但是内容只显示两行。那么当文章的内容开头如果出现大量空格符号的话,就会显示出来两行空白,这样用户体验并不好。我们可以手动将多个空白符号替换。

String s="怎么 才能  去掉    多个        空格";
s=s.replaceAll("\\s{1,}"," ");
//s就会变成"怎么 才能 去掉 多个 空格"

三:URLDecoder.decode(url,"UTF-8")中的url中包含加号问题

在解码的url内容中,如果包含了"+"号,那么在decode()方法的源码中,就会把"+"号直接替换成空格。可以在url的提交中,将"+"号替换成"2b%"

四:ETag在缓存当中的使用

在http协议中,当ETag字符串未发生改变时,通常会返回304告诉请求者,服务器数据未改变。
在典型用法中,当一个URL被请求,Web服务器会返回资源和其相应的ETag值,它会被放置在HTTP的“ETag”字段中:


ETag: "686897696a7c876b7e"

然后,客户端可以决定是否缓存这个资源和它的ETag。以后,如果客户端想再次请求相同的URL,将会发送一个包含已保存的ETag和“If-None-Match”字段的请求。

If-None-Match: "686897696a7c876b7e"

其中If-None-Match放在header中作为字段发送就可以了。
客户端请求之后,服务器可能会比较客户端的ETag和当前版本资源的ETag。如果ETag值匹配,这就意味着资源没有改变,服务器便会发送回一个极短的响应,包含HTTP “304 未修改”的状态。304状态告诉客户端,它的缓存版本是最新的,并应该使用它。

五:toast多次弹出怎么解决

public static void showToast(Context context, 
        String content) {
        if (toast == null) {
            toast = Toast.makeText(context,
                         content, 
                         Toast.LENGTH_SHORT);
        } else {
            toast.setText(content);
        }
        toast.show();
    }

这样就可以了,避免了多次弹出toast,哪怕多次触发这个方法,也只会占用一个toast的时间。

六:onCreate 和 onRestoreInstanceState 二者在恢复数据时的区别

restore 是恢复的意思。以前片面理解为再存储,导致对这个方法理解失误。在旋转屏幕,导致资源重新加载,系统内存不足,kill 掉优先级较低的activity(这里的优先级是指,与用户交互的activity优先级最高,可见但不能交互的优先级次之,不可见的activity优先级最低),都会触发onSavedInstanceState
onRestoreInstanceState从时序上看,被调用是在activity重建之后的调用onStart之后,在onResume之前。

Most implementations will simply use onCreate(Bundle) to restore their state, but it is sometimes convenient to do it here after all of the initialization has been done or to allow subclasses to decide whether to use your default implementation.
So for best practice, lay out your view hierarchy in onCreate and restore the previous state in onRestoreInstanceState. If you do that, anyone who subclasses your Activity can chose to override your onRestoreInstanceState to augment or replace your restore state logic. This is a long way of saying onRestoreInstanceState serves as a template method.

从上面的文档中,我们可以看出,best practice 是在onCreate中布局view,在onRestoreInstanceState中保存状态。这样是方便在继承中可以方便增加或者替代onRestoreInstanceState 中的恢复状态逻辑。

二者还有一点小小的区别,就是在onCreate中使用savedInstanceState时,需要判断是否null,而在onRestoreInstanceState中,则无需判断savedInstanceState是否为null。因为onRestoreInstanceState被调用,就意味着savedInstanceState不为null。

引申
1:我们也可以通过

android:screenOrientation="portrait"

来指定activity只能处在横屏或者竖屏。

2:我们也可以通过

android:configChanges="orientation|screenSize|keyboardHidden"

指定activity在旋转屏幕时,不重建activity,而是只调用onConfigurationChanged(Configuration newConfig)这个方法。

七:在使用CMake编译原生库的时候,SHARED的含义。

在android studio2.2之后,我们在创建一个带有c++的原生项目时,系统会默认使用Cmake编译,届时也会自动生成一个CMakeLists.txt的文件,其内容如下:

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED  src/main/cpp/native-lib.cpp )

find_library(  log-lib  log )

target_link_libraries(native-lib  ${log-lib} )

其中就有这样一个 SHARED。其实我们在编译c++库的时候,可以生成两种库,一种是静态库STATIC,主要以.lib或者.a 后缀组成。一种是动态库SHARED,主要由.so或者.dll后缀组成。

静态库特点:

  • 静态库对函数库的链接是放在编译时期完成的。 程序在运行时与函数库再无瓜葛,移植方便。
  • 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

动态库特点:

  • 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。

  • 动态库把对一些库函数的链接载入推迟到程序运行的时期。

  • 可以实现进程之间的资源共享。(因此动态库也称为共享库)

  • 将一些程序升级变得简单。增量更新

  • 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

八:android库使用注意事项

  • 库中所有资源默认为public。如果需要将资源私有化,必须至少将一个属性定义为public。定义public的位置在res/values/public.xml文件中:
<resources>
    <public name="mylib_app_name" type="string"/>
    <public name="mylib_public_string" type="string"/>
</resources>
  • 工具不支持在库模块中使用原始资源文件(保存在 assets/ 目录中)。应用使用的任何原始资源都必须存储在应用模块自身的 assets/ 目录中。

九:保持屏幕常量 android:keepScreenOn="true"

当我们在某个activity的布局中将该view的属性中添加一个 android:keepScreenOn="true"时,那么这个activity就会一直亮起,直到手动关闭。

    android:keepScreenOn="true"

我们也可以通过setKeepScreenOn(boolean keepScreenOn),通过代码动态设置这一属性。

十:LinearLayout 自带添加删除动画开启

最近看代码的时候,猛然发现,原来LinearLayour自带添加删除动画

android:animateLayoutChanges="true"
Paste_Image.png

就是上面这行代码,能够瞬间让你addView()变得高大上起来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,418评论 25 707
  • 您的应用中的Activity应该做到如下需求: 1.用户在使用应用时接听来电或切换到另一个应用,它不会崩溃。 2....
    正阳Android阅读 522评论 1 0
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w阅读 696评论 0 4
  • 你所拣选、使他亲近你、住在你院中的,这人有福了! 我们要因你居所、你圣殿的美福知足。(诗篇 65:4) 家裡第一處...
    有光实验阅读 147评论 0 0
  • 一扇门 两个时空 室外零下几度 冷风冰雨 来势汹汹 室内暖气 源源不断 奈何面积庞大 又只稀散几人 暖气叫嚣 罢工...
    紫諾丶柒陌阅读 164评论 2 1