android 开发小知识点总结

==================================================================================================

=====知识需要不断的总结和归纳,取其中纲领性的内容去除粗略的内容,最后便于灵活的运用,便于记忆=================
==================================================================================================

安卓科技是移动互联网技术的未来,未来安卓将无处不在。
欲速则不达,需要每天都有总结,每天都有进步!
1.TextView的drawTop等四大属性设置
tvMenu.setCompoundDrawables(new BitmapDrawable(getResources(), loadedImage),null,null,null);
设置上下左右图片。
2.安卓应用签名,注意事项
加代码混淆,固定的用法,model实体类由于在json解析时可能用到,所以要避免对其进行混淆,需要注意;
除了必需的写法之外,还需要注意一下几种意思:
-libraryjars 引用jar
-dontwarn    不警告
-dontskipnonpubliclibraryclasses  不要跳过对非公共库的类文件的混淆
-keep class 
-keep interface
-keepattributes
-keepclassmembers
-keepclasseswithmembers
-keepclasseswithmembernames
3.控件滚动,父子之间触摸事件的拦截传递和处理
首先讨论下控件与屏幕的关系:
手机屏幕以左上角为原点,向左上为负值,向右下为正值,其他控件的位置都是相对于这个原点的距离;
scrollTo、scrollBy、getScrollX、getScrollY;
所以getScrollX==(0,0)-px,若px为正值则说明控件在屏幕的右方,那么得到的值就是负值
getScrollY==(0,0)-py,若px为正值则说明控件在屏幕的下方,那么得到的值就是负值
scrollBy,在x和y方向上位移dx和dy,即对scrollX,scrollY分配加上dx和dy,dx/dy>0,代表要向左或上位移


总之要明白一个概念:scrollX/scrollY的值是和控件的坐标值相反的,因在计算机中滚动条的滚动的方向和控件移动的方向相反,
所有滚动的距离是控件时间的位置相对于原点的相反值。
同时也需要知道一点,触摸的滚动方向和控件移动的方向的一致性,便和滚动条方向相反性
--------------


Scroller滚动器
---------
VelocityTracker滚动速率,一般需要根据所需设置一个基准值,然后跟当前速率进行比较,
mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(event);
final VelocityTracker velocityTracker = mVelocityTracker;
//设置速率单位为每秒滑动的像素数
velocityTracker.computeCurrentVelocity(1000);
int velocityY = (int) velocityTracker.getYVelocity();
int velocityX = (int) velocityTracker.getYVelocity();
//垂直方向每秒滑动大于100像素时触发
if (velocityY > 100) {
}
-----------
4.控件权重
下面是特殊的写法,当LinearLayout中有多个元素,其中只有一个元素有权重属性,那么代表该元素占满除其他元素之外的
剩余所有空间。这个特点比较有用,可以实现头底悬停中间滚动的效果
android:layout_weight="1" 
5.屏幕适配
区分样式文件:
6.内存泄露和溢出
7.活动的启动模式(重点)浮在表面而不精
singleTask单任务模式,再次运行之的时候会把其上面所有的活动给destroy掉,由其他应用启动该应用时,如果该应用已经存在任务栈,那么就会使用当前任务栈,否则重新创建一个任务栈,singleTask启动的活动并不一定在任务栈的底部,因为在同一应用中通过该标识是不会重新创建一个新任务栈的。
stantard标准模式,相当于多实例模式,每启动都是重新创建
singleInstance单实例模式,全局条件下,任务栈中是否存在,不存在则创建,否则共享该活动;一次创建在多应用中可供共享,并且该活动是一个活动独占一个任务栈。
singleTop顶部唯一模式,先判断任务栈顶部是否存在若存在,若存在则不创建新的,若为启动老的即调用onNewIntent()
使用singleTask的目的:
-1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它;就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。
-2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
singleTask作用是使得当前应用开辟一个新栈来管理他的活动们,但不代表一个应用仅有这一个任务栈。
singleInstance作用是使得不同应用能够共享到相同的一个活动,该活动自成一栈
下面两种标识的用法:联合使用时阻止当前应用已经存在的任务栈弹到前台,从而实现全局对话框的效果
dialogintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
public static final int FLAG_ACTIVITY_MULTIPLE_TASK 
Since: API Level 1 
Do not use this flag unless you are implementing your own top-level application launcher. Used in conjunction with FLAG_ACTIVITY_NEW_TASK to disable the behavior of bringing an existing task to the foreground

8.广播的使用 contentIntent 不可以为null,因为在部分机型不允许这么做

Intent intent = new Intent(this, XXXXX.class);
                PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, intent,
                                PendingIntent.FLAG_UPDATE_CURRENT);

                mNotification.contentIntent = contentIntent;

9.安卓应用开机自启动

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
命令发送BOOT_COMPLETED广播,而不用重启测试机或模拟器来测试BOOT_COMPLETED广播,这条命令可以更精确的发送到某个package,如下:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name

Android3.1之后,系统为了加强了安全性控制,应用程序安装后或是(设置)应用管理中被强制关闭后处于stopped状态,在这种状态下接收不到任何广播。直到被启动过(用户打开或是其他应用调用)才会脱离这种状态,所以Android3.1之后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值