赞
踩
1、Android学习笔记:OkHttp
2、Android学习笔记:更新UI的方法(UI线程和非UI线程)
3、Android学习笔记:Volley
4、Android学习笔记:Handler
5、Android学习笔记:Android-Async-Http
6、Android学习笔记:HttpClient和HttpURLConnection
7、Android学习笔记:SharedPreferences
8、Android学习笔记:AsyncTask
9、Android学习笔记:EventBus和otto
10、Android学习笔记:活动(Activity)
11、Android学习笔记:布局
12、Android学习笔记:ListView
13、Android学习笔记:Universal-Image-Loader
14、Android学习笔记:WebView
15、Android学习笔记:RecyclerView
16、Android学习笔记:ButterKnife插件
17、Java学习手册:XML
18、Android学习手册:JSON解析工具比较
19、Android学习笔记:服务(Service)
20、Android学习笔记:广播(Broadcast)
21、Android学习笔记:内容提供器(Content Provider)
22、Android学习笔记:碎片(Fragment)
23、Android学习笔记:框架模式
24、Android学习笔记:Android优化
25、Android学习笔记:线程池(ThreadPool)
26、Android学习笔记:IntentService
27、Android学习笔记:通知(Notification)
28、Android学习笔记:ANR的定位和修正
29、Android学习笔记:Material Design
0、Android的系统架构
Android系统采用分层架构,由高到低分为4层,依次是应用程序层、应用程序框架层、核心类库层、Linux内核。
1、四大组件
(1)Android系统的四大组件分别是:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供器(Content Provider)。
(2)Android的四大组件中除了BroadcastReceiver以外,其他三种组件(Activity、Service、ContentProvider)都必须在AndroidManifest中注册,对于BroadcastReceiver来说,它既可以在AndroidManifest.xml中注册,也可以通过代码来注册。
(3)在调用方式上,Activity、Service、BroadcastReceiver需要借助Intent,而ContentProvider则无须借助Intent。
2、定义一个应用程序名的字符串,有以下两种方式来引用它:
<resources>
<string name="app_name">HelloWorld</string>
</resources>
3、targetSdkVersion(build.gradle中)
如果设置了此属性,那么程序在执行时,如果目标设备的API版本正好等于此数值,它会告诉Android平台:此程序在此版本已经经过充分测试,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。
4、日志工具Log
| 方法 | 对应级别 | 级别由低到高 |
|---|---|---|
| Log.v() | verbose | ⬇ |
| Log.d() | debug | ⬇ |
| Log.i() | info | ⬇ |
| Log.w() | warn | ⬇ |
| Log.e() | error | ⬇ |
5、两个Activity之间跳转时必然会执行的是哪几个方法?
前一个Activity的onPause()方法,后一个Activity的onResume()方法。
6、配置主活动
在<activity>标签内部加入<intent-filer>标签,并在标签里添加如下两句声明即可。
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
7、Toast
(1)Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。
(2)跨程序访问时不能直接使用Toast。
8、Intent
Intent是Android程序中各种组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
使用隐式Intent需要注意:
(1)只有< action >和< category >中的内容同时能够匹配上Intent指定的action和category时,这个活动才能响应该Intent。
(2)每个Intent中只能指定一个action,但却能指定多个category。
(3)只有< data >标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent。
特殊情况说明:(如下)
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
//跳转后加上一句finish(),当从A跳转到B的时候,再点击返回键,B会跳转到A之前的那个activity,而不会返回A
//如果A是主界面,即A之前没有activity,那么会直接返回到手机主界面
finish();
9、SingleInstance
(1)以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只存在一个这样的实例。
(2)以singleInstance模式启动的Activity在整个系统中是单例,如果再启动这样的Activity时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
(3)以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务栈,被它开启的任何Activity都会运行在其他任务栈中。
(4)被singleInstance模式的Activity开启的其他Activity,能够在新的任务栈中启动,但不一定开启新的任务栈,也可能在已有的一个任务栈中开启。
10、android:layout_gravity和android:gravity的区别
(1)android:gravity是对view控件本身来说的,是用来设置view本身的内容应该显示在view的什么位置,默认值是左侧,也可以用来设置布局中的控件位置。
(2)android:layout_gravity是相对于包含该元素的父元素来说的,设置该元素在父元素的什么位置。
例如TextView中,android:gravity表示TextView文本在TextView的什么位置,默认值是左侧;android:layout_gravity表示TextView在界面上的位置。
11、dp与sp的区别
(1)dp:一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。
(2)sp:主要用于字体显示,与刻度无关的一种像素,与dp类似。
→长度宽度的数值要使用dp作为单位放入dimens.xml文件中
→字体大小的数值要使用sp作为单位放入dimens.xml文件中
注意:使用sp作为字体大小的单位,会随着系统的字体大小而改变,而dp作为单位则不会。
12、Android工程中图片资源命名禁忌
(1)大写字母
(2)”default.png“
(3)以下划线("_")开头
(4)以数字加下划线("[0-9] _")开头
13、layout_weight属性
只有线性布局(LinearLayout)支持使用layout_weight属性,来实现按比例指定控件大小的功能。
系统会先把LinearLayout下所有控件指定的layout_weight值相加,得到一个总值。然后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。
14、ViewGroup
所有的布局都是直接或间接继承自ViewGroup的。
View是Android中最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件。
ViewGroup则是一种特殊的View,它可以包含很多子View和子ViewGroup,是一个用于放置控件和布局的容器。
ViewGroup的作用就是对添加进它的View组件进行布局。
15、LayoutInflater与findViewById的区别
在实际开发中,LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是:
16、JSON
一个最基本的JSON对象是有两个花括号:"{“和”}"。
17、JSONObject
在JSONObject这个类中获取value存在两类方法 optXXX和getXXX ,二者的区别如下:
(1)getString在值为null时会抛出异常,我们需要对该异常进行捕获处理;
(2)optString在值为null时不会抛出异常,而是返回fallback的值,因此我们无需进行异常处理;
因此,如果不想对异常进行捕获处理则使用optXXX,否则就需要对相应的异常进行捕获操作。
18、序列化(使用Intent传递对象)
序列化的作用:
两种序列化(使用Intent传递对象)的方法:
二者的不同:
总结:Android上应该尽量采用Parcelable,效率至上,效率远高于Serializable。(建议在网络传输时采用Serializable,在Android程序内使用Parcelable)
19、线程间通讯
我们知道线程是CPU调度的最小单位。在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的。而线程间通信的方式有很多,比如广播,Eventbus,接口回调,在Android中主要是使用Handler。Handler通过调用sendmessage()方法,将发送的消息Message保存到Messagequeue中,而looper对象不断的调用loop()方法,从messageueue中取出message,交给Handler处理,从而完成线程间通信。
20、Nine-Patch图片
创建过程:在Android Studio中对着任意一张png图片右击→Create 9-Patch file,即可创建Nine-Patch图片。
(1)左边线条:当图片进行纵向拉伸时,由此线条从图片左边水平位移到图片右边,所形成的区域都是可以纵向拉伸的,此区域外侧不进行拉伸,保留原来效果。
(2)上边线条:当图片进行水平拉伸时,由此线条从图片上边垂直位移到图片下边,所形成的区域都是可以横向拉伸的,此区域外侧不进行拉伸,保留原来效果。
(3)右边线条:控制图片填充内容的垂直pandding留白。
(4)下边线条:控制图片填充内容的水平pandding留白。
(5)总:上边框和左边框的区域就是图片要拉伸的区域;右边框和下边框的区域就是文字内容写在图片上的区域。
21、字体
Android系统对字体的载入有一个优先级顺序,首先是西方字符,然后是一些符号字体(包括emoji字体),最后是中日韩字符。Android系统自带的只有"sana(默认)"、“serif(西方国家字母体系)”、"monospace(等宽字体)"三种字体,用户可以根据需要自行添加字体。
22、数据加密
注:采用DES与RSA相结合的应用,使它们的优缺点正好互补,即DES加密速度快,适合加密较长的报文,可用其加密明文;RSA加密速度慢,安全性好,应用于DES 密钥的加密,可解决DES 密钥分配的问题。目前这种RSA和DES结合的方法已成为EMAIL保密通信标准。
23、限定符(Qualifiers)
| 屏幕特征 | 限定符 | 描述 |
|---|---|---|
| 大小 | small | 提供给小屏幕设备的资源 |
| 大小 | normal | 提供给中等屏幕设备的资源 |
| 大小 | large | 提供给大屏幕设备的资源 |
| 大小 | xlarge | 提供给超大屏幕设备的资源 |
| 分辨率 | ldpi | 提供给低分辨率设备的资源(120dpi以下) |
| 分辨率 | mdpi | 提供给中分辨率设备的资源(120dpi~160dpi) |
| 分辨率 | hdpi | 提供给高分辨率设备的资源(160dpi~240dpi) |
| 分辨率 | xhdpi | 提供给超高分辨率设备的资源(240dpi~320dpi) |
| 分辨率 | xxhdpi | 提供给超超高分辨率设备的资源(320dpi~480dpi) |
| 方向 | land | 提供给横屏设备资源 |
| 方向 | port | 提供给竖屏设备资源 |
24、Application类
Application类和Activity、Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。
Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(Singleton)模式的一个类。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,则可以创建一个类使其继承Application,并实现onCreate()方法,此外在AndroidManifest.xml文件中的application标签中进行注册。
注意:不要在Android的Application对象中缓存数据。基础组件之间的数据共享可以使用Intent等机制,也可以使用SharedPreferences等数据持久化机制。
25、数据持久化
(1)瞬时数据:指那些存储在内存中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据。
(2)数据持久化:指将那些内存中的瞬时数据保存到设备中,保证即使在手机关机的情况下,这些数据仍然不会丢失。Android系统的数据持久化主要有三种方式:即文件存储、SharedPreference存储、数据库存储,此外还可以将数据存入SD卡中。
①文件存储
文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中,因此适合用于存储一些简单的文本数据或二进制数据。
//1、将数据存储到文件
String data = "XXX";
//Context类提供了一个openFileOutput()方法,用于将数据存储到指定的文件中
//该方法有两个参数,第一个参数是文件名(不可以包含路径,因为存储路径默认)
//第二个参数是文件的操作模式,有两种模式:MODE_PRIVATE和MODE_APPEND
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。