Java&Android零碎的知识点2
2017-09-17 15:59
309 查看
1、抽象类实现接口,不用实现接口的方法。
2、内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
3、窗口addView并动画
1)绘制第一帧的监听要在addView之前
2)要等绘制第一帧开始再进行动画
3)记得remove监听
4)translationY: view的初始位置为0,下方为正,上方为负
4、父类的静态变量只会初始化一次。
5、SpannableString与SpannableStringBuilder
首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。
void setSpan (Object what, int start, int end, int flags)
函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。
参数说明:
object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
各种Span设置
字体颜色设置(ForegroundColorSpan)
SpannableString spanString = new SpannableString(“欢迎光临Harvic的博客”);
//再构造一个改变字体颜色的Span
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
//将这个Span应用于指定范围的字体
spanString.setSpan(span, 1, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置给EditText显示出来
editText.setText(spanString);
字体背景颜色(BackgroundColorSpan)
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
字体大小(AbsoluteSizeSpan)
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);
粗体、斜体(StyleSpan)
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
删除线(StrikethroughSpan)
StrikethroughSpan span = new StrikethroughSpan();
下划线(UnderlineSpan)
UnderlineSpan span = new UnderlineSpan();
图片置换(ImageSpan)
SpannableString spanString = new SpannableString(“欢迎光临Harvic的博客”);
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spanString);
这个函数的不同之处在于,前几都是在原来文字的基础上加上特效,而这里却是利用图片将文字替换。如果遇到不支持显示图片的函数,比如前一篇中的canvas绘图。就会退化成String,即以原来的String字符串来显示。
6、get和post
7、http和https
8、TCP和UDP
TCP:面向连接,可靠,传输大量数据,速度慢
UDP:面向非连接,不可靠,少量数据,速度快
9、include、merge 、ViewStub
标签能够重用布局文件
标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。多用于替换FrameLayout或者当一个布局包含另一个时,标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用标签优化。
现在,当你添加该布局文件时(使用标签),系统忽略节点并且直接添加两个Button。
标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用标签,以减少内存使用量,加快渲染速度。是一个不可见的,大小为0的View。
2、内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
3、窗口addView并动画
mGuideView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { @Override public boolean onPreDraw() { startAnimation(); mGuideView.getViewTreeObserver().removeOnPreDrawListener(this); return true; } }); windowManager.addView(mGuideView, params); protected void startAnimation() { ObjectAnimator animator = ObjectAnimator.ofFloat(mGuideView, "translationY", 75, 0); }
1)绘制第一帧的监听要在addView之前
2)要等绘制第一帧开始再进行动画
3)记得remove监听
4)translationY: view的初始位置为0,下方为正,上方为负
4、父类的静态变量只会初始化一次。
5、SpannableString与SpannableStringBuilder
首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。
void setSpan (Object what, int start, int end, int flags)
函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。
参数说明:
object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。
各种Span设置
字体颜色设置(ForegroundColorSpan)
SpannableString spanString = new SpannableString(“欢迎光临Harvic的博客”);
//再构造一个改变字体颜色的Span
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
//将这个Span应用于指定范围的字体
spanString.setSpan(span, 1, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//设置给EditText显示出来
editText.setText(spanString);
字体背景颜色(BackgroundColorSpan)
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
字体大小(AbsoluteSizeSpan)
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16);
粗体、斜体(StyleSpan)
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
删除线(StrikethroughSpan)
StrikethroughSpan span = new StrikethroughSpan();
下划线(UnderlineSpan)
UnderlineSpan span = new UnderlineSpan();
图片置换(ImageSpan)
SpannableString spanString = new SpannableString(“欢迎光临Harvic的博客”);
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(spanString);
这个函数的不同之处在于,前几都是在原来文字的基础上加上特效,而这里却是利用图片将文字替换。如果遇到不支持显示图片的函数,比如前一篇中的canvas绘图。就会退化成String,即以原来的String字符串来显示。
6、get和post
GET将数据放在URL后面。而POST将数据放在表单中。 GET的URL会有长度上的限制,则POST的数据则可以非常大。 POST比GET安全,因为数据在地址栏上不可见。
7、http和https
HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 标准端口是80 ,而 HTTPS 的标准端口是443 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 工作在传输层 HTTP 无法加密,而HTTPS 对传输的数据进行加密 HTTP无需证书,而HTTPS 需要CA机构颁发的SSL证书
8、TCP和UDP
TCP:面向连接,可靠,传输大量数据,速度慢
UDP:面向非连接,不可靠,少量数据,速度快
9、include、merge 、ViewStub
标签能够重用布局文件
标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。多用于替换FrameLayout或者当一个布局包含另一个时,标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用标签优化。
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/delete"/>
现在,当你添加该布局文件时(使用标签),系统忽略节点并且直接添加两个Button。
标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用标签,以减少内存使用量,加快渲染速度。是一个不可见的,大小为0的View。
相关文章推荐
- Java&Android零碎的知识点
- 【Java&Android】名企面试题和涉及知识点整理
- javaweb & android 对比理解图 系列 图一
- Android Java Timer & TimerTask 学习
- android Collections.sort(List<T> list) 与JAVA Collections.sort(List<T> list)
- Java基础、android知识点要求
- [异常-开发环境-myeclipse-ubuntu-android2.2]keytool": java.io.IOException: error=13, 权限不够
- Java&Android的线程池---ExecutorService
- 【066】Android & Java 难点解析
- Android程序"java.net.SocketException: Permission denied"异常
- java+android+.net+php全套视频下载--->有链接.
- JAVA&Android: 如何显示比当前DATE时间,提前一个月的时间
- Java & Android 多线程
- Java&&Android Socket简单用法
- Java&Android的线程池ExecutorService
- Android 各版本代号 & Java Source Download
- Android小知识一: 从命令行启动Java应用&增加Java应用
- Android Java 框架基础[知识点汇总]
- Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
- 几个常见的错误(java&android)问题