那些年踩过的坑——Android篇

2017-06-07  本文已影响22人  7397aef58145

1.使用databinding时,在布局文件中设置android:onclick属性,在viewmodel文件中处理事件时,事件方法参数需要为View,否则会提示找不到databinding错误。

2.ImageView的src属性是设置前景图片,前景图片不会被拉伸,background属性是设置背景图片,背景图片会被拉伸。

3.getFragmentManager是属于Activity的方法,getChildFragmentManager是属于Fragment的方法,用于管理Fragment嵌套使用。

4.android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里。

5.main 和 launcher是配合使用的,可以多次配合使用,在桌面程序列表中会出现多个启动图标

6.每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。

7.一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。

8.规则a.一条元素至少应该包含一个,否则任何Intent请求都不能和该匹配。

规则b.如果Intent请求的Action和中个某一条匹配,那么该Intent就通过了这条的动作测试。

只有当Intent请求中所有的Category与组件中某一个IntentFilter的完全匹配时,才会让该 Intent请求通过测试,IntentFilter中多余的声明并不会导致匹配失败。一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。

9.显式 Intent 始终会传递给其目标,无论组件声明的 Intent 过滤器如何均是如此。

10.java里所有的对象实例都是"new 出来的", 所有的对象实例都在堆中, 局部变量里只是对象引用. 局部变量(again, 只是引用)在方法执行完毕之后自动被抛弃. 而对应的对象实例是否被gc,其必要条件为对其的引用为0, 如果此实例的引用 在方法执行完毕后 不为0(比如你把此实例 保存到了 某缓存中), 则不会被gc.

11.调用show() & hide()方法时,Fragment的生命周期方法并不会被执行,仅仅是Fragment的View被显示或者​隐藏。而且,尽管Fragment的View被隐藏,但它在父布局中并未被detach,仍然是作为containerView的childView存在着。

12.枚举,虽然Effective Java中推荐使用,但是在Android平台上却是不被推荐的。在这篇Android Training中明确指出:

Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.

13.之前我们只能在application或者activity中使用theme主题,但是在Android5.0中可以给View使用theme主题,这个View及其子View都会使用这个theme,给了我们设计一个很大的灵活性。

给View添加theme的方法为:

android:theme="你的theme"

上一篇下一篇

猜你喜欢

热点阅读