Android基础回顾笔记

作者: sinyu 分类: Android,Java,总结与反思 发布时间: 2018-03-21 11:09

 

一、 快捷键

功能 快捷键 描述
自动补全 TAB 如:logt+TAB可自动补全log
重写方法 Ctrl+O
格式化代码 Ctrl + Alt + L
注释 Ctrl+/
搜索 Ctrl+F
替换 Ctrl+R
包裹选中代码 Ctrl+Alt+T
代码块注释 Ctrl+Shift+/

 

二、 重要的知识点

2.1 Android活动的生命周期

 

2.2 Android碎片的生命周期

 

2.3 Android Service的生命周期

 
 

三、 有趣的知识点

3.1 build.gradle中的第一行

通常为com.android.application,表示这是一个应用程序,还可以是另一种com.android.library,表示这是一个库模块(SDK?)。

3.2 活动被回收了数据怎么办?

为防止系统内存不足回收之前的活动,导致这个活动中的用户输入数据丢失,可以使用onSaveInstanceState()回调方法,这个方法保证了活动回收之前一定被调用,该方法带有Bundle可以调用putString()等方法,保存之后可以再onCreate()方法中的bundle取出(判断是否为空)。
 

3.3 BaseActivity

在每一个Android项目中使用BaseActivity做每个活动的基础,可以方便管理、更加高效,以及使用全局List管理Activity,可以随时退出某个或者全部活动,可以运用在重复登录问题上。
 

3.4 ListView的性能提升

(1)利用getView()中的convertView参数对之前加载好的布局进行缓存
(2)新建ViewHolder类对控件的实例进行缓存

3.5 RecyclerView介绍

RecyclerView更加有逻辑性,并且更加可控可变,使用RecyclerView可以实现横向、网格、瀑布流等排列方式。

3.5 Android碎片-动态加载布局(根据屏幕大小)

动态加载布局使用的是Android中的限定符,如layout-large文件夹下的布局会在大屏幕下时加载。限定符参考如下:
表3-1 Android限定符

3.6 Toast自定义View

首先实例化Toast,接着对toast进行设置时间、对齐方式、View。View使用新建布局管理器,在布局中填充View。
 

3.7 资源文件

(1)string
文件:res/values/strings.xml
格式:<string name=” ”>…</string>
使用:Java中用getResources().getString(R.string.name),XML中用@string/name
(2)color
文件:res/values/colors.xml
格式:<color name=” ”>#….</ color >  #Alpha(透明度)-Red-Green-Blue
透明度:1完全不透明 0完全透明
使用:Java中用getResources().getColor(R.color.name),XML中用@color/name
(3)尺寸
文件:res/values/dimens.xml
格式:<dimen name=” ”>…</ dimen >
使用:Java中用getResources().getDimension(R.dimen.name),XML中用@ dimen /name
(4)layout
在xml中可以使用include layout
(5)数组资源
文件:res/values/arrays.xml
格式:<string-array name=” ”>
<item>xxx</item>
</ string-array >
使用:Java中用getResources().getStringArray(R.array.name),XML中用@ array /name
(6)Drawable
<1>图片:9-patch 可缩放
<2>StateListDrawable: 根据状态呈现不同样式。如BUTTON有pressed,enabled,focused等状态。
例:<selector xmls…..>
<item android:color=”” XXXXXX./>
</selector>
(7)样式/主题
<1>样式
文件:res/values/styles.xml
格式:<style name=” ”>
<item name=””>xxx</item>
</ style >
继承:<style name=” ” parent=”XX”>
<2>主题:作用于Acitvity
 

3.8 Java回调机制

回调的思想是:
1、类A的a()方法调用类B的b()方法
2、类B的b()方法执行完毕主动调用类A的callback()方法
这样一种调用方式组成了上图,也就是一种双向的调用方式。
理解:定义一个接口,在接口中定义方法但不实现。在其他类的方法中的形参使用该接口,并且在方法中实现接口的调用,完成后调用该类,在接口实参处重写两个方法即可,等待类中的执行调用此处接口的方法。例如常见的点击事件中的Onclick就是一种回调实现,具体可参考《Android第一行代码 第二版》P335。

3.9 Matcrial Design UI

控件:

  1. Toolbar

替代actionBar,位于活动的顶部。
 

  1. 滑动菜单
  2. DrawerLayout:这个控件可以轻松实现滑动菜单。在该布局中设置两个直接子控件,第二个控件必须实现layout_gravity属性表示菜单在哪一边。同时可以在左上角添加按钮,点击实现菜单的滑出
  3. NavigationView:是Design Support库中的一个控件,可以轻松实现滑动菜单的UI设计,使得滑动菜单更加好看。

 

  1. 悬浮按钮与可交互提示

立面设计是MD设计中重要的设计思想,应用的界面不仅只是一个平面的,还是立体的。

  1. FloatingActionButton :该控件可轻松实现MD 中的悬浮按钮效果,指定layout_gravity为bottom|end,即可将控件置于右下角,并设置图片src,该控件的点击事件监控与正常的BUTTON是同样的方法。
  2. Snackbar,该控件是可交互的提示工具,显示提示时可加入按钮,让用户点击,执行些额外的代码,并且交互体验上更加完美。make(view,””,1).setAction().show.
  3. CoordinatorLayout,加强版的FrameLayout,MD提供的布局。可以监听所有子控件的各种事件,可以做出最合理的响应,比如Snackbar将悬浮按钮遮挡住了,该布局可可以监听弹出事件,将悬浮按钮上移。
  4. 卡片式布局
  5. CardView,该控件用来实现考布局效果,也是FrameLayout,知识额外提供了圆角和阴影等效果。

b. AppBarLayout,实际是个垂直的LinearLayout,它的内部做了许多滚动时间的封装,并应用了MD的设计理念。第一步将Toolbar嵌套进来,第二步设置RecyclerView指定一个布局行为。在ToolBar中加入app:layout_scrollFlags=”scroll|enterAlways|snap”,表示上滚动时隐藏,下滚动时就显示。

  1. SwipeRefreshLayout,下拉刷新,嵌套在外面使用,较简单。
  2. CollapsingToolbarLayout , 是一个作用于Toolbar基础上的布局,可以实现非常华丽的可折叠式的标题栏。

 

3.10 全局获取Context

创建自己的MyApplication类,在该类中定义静态私有的Context,并定义getContext的静态公有方法,oncreate中赋值context,并在AndroidManifest.xml中设置该MyApplication,这样全局都可以通过静态调用方法获取Context。

3.11 Intent传递对象

传递对象通常有两种实现方式:Serializabnle和Parcelable。
 

3.12 定义自己的日志工具

实现可以在开发测试时log开启,在上线项目时一键关闭,自定义LogUtil,并定义等级,通过判断等级显示。
 

3.13 定时任务Alarm机制

3.14 Lambda表达式

Java8的新特性,用它编写代码更加简洁易读。
 

3.15 实体类

在Java中,实体类就是一个拥有Set和Get方法的类。实体类通常总是和数据库之类的(所谓持久层数据)联系在一起。这种联系是借由框架(如Hibernate)来建立的。 实体类主要是作为数据管理业务逻辑处理层面上存在的类别; 它们主要在分析阶段区分 实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。
 
 

四、 易忘的知识点

4.1 给activity加上Menu

重写onCreateOptionsMenu()方法,添加如下代码:

GetMenuInflater().inflate(R.menu.main,menu);

Return true;

添加菜单响应事件,重写onOptionsItemSelected()方法,switch(item.getItemId())

4.2 活动的启动模式

四个:standard(默认)、singleTop、singleTask、singleInstance(与其他活动共享这个活动)。

4.3 Android:layout_gravity与Android:gravity的区别

前者用于指定控件在布局中的对齐方式,后者用于指定文字在控件中的对齐方式。

4.4 Android中的四种基本布局

LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)、百分比布局(PercentFrameLayout、PercentRelativeLayout)。
 

4.5 Android广播

广播的类型:标准广播、有序广播,发送使用sendBroadcast(intent)/ sendOrderedBroadcast。接受有动态注册接收以及静态注册接收。可以实现网络变化的监听、开机广播的监听等等。以及可以创建本地广播,只在本应用中。广播还可与BaseActivity结合运用于强制退出登录。
 

4.6 Android运行时权限

Dangerous Permissions(9组24个):

group:android.permission-group.CONTACTS 通讯录方面

permission:android.permission.WRITE_CONTACTS 写入通讯录

permission:android.permission.GET_ACCOUNTS 访问通讯录权限

permission:android.permission.READ_CONTACTS 读取通讯录



group:android.permission-group.PHONE 电话方面

permission:android.permission.READ_CALL_LOG 看电话记录

permission:android.permission.READ_PHONE_STATE 读取手机状态

permission:android.permission.CALL_PHONE 打电话

permission:android.permission.WRITE_CALL_LOG 编写调用日志

permission:android.permission.USE_SIP 使用SIP

permission:android.permission.PROCESS_OUTGOING_CALLS 过程输出调用 permission:com.android.voicemail.permission.ADD_VOICEMAIL 添加语音信箱



group:android.permission-group.CALENDAR 日历

permission:android.permission.READ_CALENDAR 读取日历

permission:android.permission.WRITE_CALENDAR 写入日历



group:android.permission-group.CAMERA 照相机

permission:android.permission.CAMERA



group:android.permission-group.SENSORS 传感器

permission:android.permission.BODY_SENSORS 体传感器



group:android.permission-group.LOCATION 位置

permission:android.permission.ACCESS_FINE_LOCATION 获取好位置

permission:android.permission.ACCESS_COARSE_LOCATION



获取粗定位group:android.permission-group.STORAGE 存储

permission:android.permission.READ_EXTERNAL_STORAGE 读取外部存储器 permission:android.permission.WRITE_EXTERNAL_STORAGE 写外部存储器



group:android.permission-group.MICROPHONE 扩音器;麦克风

permission:android.permission.RECORD_AUDIO 录音



group:android.permission-group.SMS 信息

permission:android.permission.READ_SMS 读取信息

permission:android.permission.RECEIVE_WAP_PUSH 收到WAP推送

permission:android.permission.RECEIVE_MMS 接收彩信

permission:android.permission.RECEIVE_SMS 收信息

permission:android.permission.SEND_SMS 发信息

4.7 Android数据持久化

主要有3中数据持久化功能,即文件存储、sharedpreference存储以及数据库存储。
 

4.8 物理按键的获取

在Activity中重写onKeyDown方法,判断keyCode此时是哪个按键返回TRUE是拦截,返回FALSE继续系统该有的操作。

4.9 Android网络

HTTP请求方式有两种:HttpURLConnection和HttpClient,后者在6.0之后不再建议使用,网络服务常用第三方库OkHttp。传输数据常用的格式有XML和JSON。XML比较常用的解析方式:Pull和SAX。JSON的解析可以用Gson库,方便操作以及解析。
 

4.10 Android图形

1.常用绘图类
①Paint 画笔
②Canvas 画布
③Bitmap 位图
④BitmapFactory 数据解析成Bitmap
2.绘制2D图形
①几何图形:通过Canvas中的drawXXXX()绘制
②文本:通过Canvas中的drawText()或drawPosText()绘制
③路径:Path类 addXXX?() moveTo()设置起点
④图片绘制:通过Canvas中的drawBitmap()绘制
3.特效
①旋转  Matrix.setRotate()  postRotate() preRotate()
②缩放 setScale()
③倾斜  setSkew()
④平移 setTranslate()
⑤BitmapShader 渲染
4.动画
逐帧动画、补间动画

4.11 Android Service

Service启动有两种方式:startService()和bindService(),前台服务可以在服务中加入启动notification。为了防止服务中执行耗时任务导致ANR,可以使用IntentService,IntentService在执行结束后可以自动停止服务。
 
 

五、 需调整的地方

5.1不再使用syso,换成Log

5.2 尽量使用RecyclerView代替ListView

5.3 尽可能多的使用资源文件

如文字、数组,可以方便修改。

5.4 使用AsyncTask

 

六、 Android Studio使用技巧

6.1代码自动换行

打开preferences然后找到editor–code style–JAVA–wrapping and braces
选中line breaks和ensure right margin is not exceeded
然后点击ok
 

七、 Android界面

 

八、 第三方库

8.1 OKHttp

8.2 Gson

8.3 LitePal

8.4 Glide

该库是超级强大的图片加载库,可以用于加载本地图片,还可以加载网络、GIF、本地视频等。使用方法简单。
 

九、 BUG记录

9.1 RecyclerView的Adapter中的item点击事件获取position为-1

在写书上实例可折叠式标题栏时,在与书上代码一致的情况下,在Adapter中的item点击事件获取position为-1,该BUG最终已参考其他项目中RecyclerView的应用方法解决,办法,新增自定义监听接口,并在Holder中监听item的点击事件,在Adapter中新增监听方法,传入监听接口,并在设置Adapter时写item点击事件的方法。项目为TestMD.
参考链接:https://blog.csdn.net/dongqiushan/article/details/79237783
 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注