Android开发技能梳理(一)——常用布局与四大组件

ps:本文章会对现在Android开发中的一些基础技能点进行梳理,内容简洁,如需深度了解还请通过关键词搜索详细部分的文章。

一、布局

1.常用布局

LinearLayoutRelativeLayoutFrameLayoutAbsoluteLayoutTableLayoutConstraintLayout

平时正经开发中用得最多的还要数LinearLayoutRelativeLayout,而ConstraintLayout是16年新出的布局,现在新建项目基本也在用这个替换了,原理是与iOS开发类似的布局,很好用。

2.自定义布局

因为常用布局在日常开发中不能完全满足公司UI需求,以及在快速开发中有很多类似的布局如果我们不做点什么的话,会增加我们的后期工作量,这时,自定义布局就成了一件必须要做的事了。

>>绘制view

>>组合布局

>>绘图

二、四大组件

Activity、Service、Content Provider、BroadcastReceiver。

1.Activity

Acitivity为与用户的交互界面,一般布局就是显示在这里面,相关还有Fragment碎片化布局,每个Activity里面可以有多个Fragment,每个Fragment里面依然可以装载多个其他Fragment,Fragment有自己的生命周期,也可以调用Activity的生命周期。

Activity生命周期

启动时:onCreat() - onStart() - onResume()

跳转到其他界面时:onPause() - onStop()

重新回到Acitivity时(前提是没有被杀死后台):onRestart() - onStart() - onResume()

退出当前Acitivity(销毁):onPause() - onStop() - onDestory()

异常终止(如横竖屏切换): 会调用onSaveInstanceState()

异常终止重新创建:会调用onRestuoreInstanceState()

Fragment生命周期

创建:onAttach() - onCreate() - onCreateView() - (Activity)onCreate() - onActivityCreated() - (Activity)onStart() - onStart() - (Activity)onResume() - onResume()

销毁:onPause() - (Activity)onPause() - onStop() - (Activity)onStop() - onDestroyView() - onDestory() - onDetach() - (Activity)onDestroy()

Activity启动模式

standard:系统默认模式,同一个Activity可以被创建多次,意味着可以同时创建多个LoginActivity或者多个MainActivity,当然也有使用场景,比如同一个Webview类型的Activity可以通过传递不同的URL来装载不同的html页面。

singleTop:如果该Activity在栈顶,则同一个Activity只会创建一次;如果已存在但不在栈顶,则依然会多次创建Activity(延伸:中间多次创建的过程中会在依次销毁途中丢失页面默认保存的数据,但第一次创建的页面数据会保存;这里的数据,比如Edittext输入内容)。

singleTask:只会在当前栈里面创建一个Activity,且原来的页面数据(比如Edittext输入内容)不会丢失。

singleInstance:会单独新开一个栈,且也是只会创建一个Activity,且原来的页面数据(比如Edittext输入内容)不会丢失。

2.Service

简单来说,服务是一种即使用户未与应用交互也可以在后台运行的组建。在默认情况下,服务是在应用的主线程中运行的,因此在运行耗时任务时,需要新开一条子线程。Service有两种启动方式。

第一种启动方式

1.定义一个类MyService继承Service

2.在AndroidManifest.xml中声明这个MyService

3.调用startSevice(Intent)方法启动MyService

4.调用stopService(Intent)方法停止MyService

生命周期:onCreate() - onStartCommand() - onDestory()

如果服务已经开启,再次startSevice不会调用onCreate()

特点:一旦服务开启,就会在后台长期运行,即使调用它的Activity销毁了,MyService依然存在。

第二种启动方式

1.定义一个类MyService继承Service

2.在AndroidManifest.xml中声明这个MyService

3.调用bindService(Intent,ServiceConnection,int)方法启动MyService

4.调用unbindService(ServiceConnection)停止MyService

生命周期:onCreate() - onBind() - onUnbind() - onDestory()

特点:MyService依附调用者,会随调用者的销毁而销毁。

延伸

1.Remote Service

远程服务也被成为独立进程,他不收其他进程影响,可以为其他应用程序提供调用的接口。Android提供了AIDL(Android Interface Definition Language)来建立进程间的接口。

场景:主APP提供天气检测系统,其他APP通过接收主APP发送的最新天气消息来更新自己的UI。

2.IntentService

为Service的子类,Sevice本身不会新开一个线程,如果需要它处理耗时任务,需要新开一条子线程,而IntentService可以直接用来处理异步请求,可以通过startService(Intent)来开启服务,当服务耗时任务处理完成后服务会自动停止,不需要再去调用stopSelf()方法停止。

3.BroadcastReceiver

广播接收器可以用来接收应用程序或者系统的广播消息。有两种不同的类型,Normal broadcasts和Ordered broadcasts。

Normal broadcasts

Normal broadcasts(普通广播)是异步的,逻辑上是可以在发出广播后被所有接收者同时收到,但是接收者无法终止广播Intent的传播;

Ordered broadcasts

Ordered broadcasts(有序广播)是按照接收者声明的优先级别(方法1.在xml中声明时intent-filter元素的android:priority属性中,取值-1000到1000,数值越大优先级越高。方法2.调用IntentFilter对象的setPriority()进行设置)被接收者一次接收广播,并且优先级高的可以截取接收到的数据并更改或新增内容,然后传递给下一个优先级的接收者。

使用

1.自定义MyBroadcastReceiver继承BroadcastReceiver

2.重写onReceive()

3.在AndoirdManifest.xml中静态注册或者在java代码中动态注册

4.声明权限"android.permission.PROCESS_OUTGOING_CALLS"

注意:

1.动态注册的广播会跟随activity的生命周期,因此需要在acitivity销毁前及时调用unregisterReceiver(BroadcastReceiver)注销,不然会报异常。

2.静态注册的广播在应用程序关闭后如果有新的信息广播,程序也会被系统调用自动运行。

3.推荐详细的讲解链接:Android BroadcastReceiver使用详解

4.ContentProvider

内容提供者组件通过请求从一个APP向其他APP提供数据。

这些请求由类ContentResolver的方法来处理。内容提供者可以使用不同的方式来存储数据(数据可以存放在数据库、文件、网络)。

它可以用来实现程序之间的数据共享。多数情况下数据是被存储到SQLite数据库中。

常用的范例有:通话记录、短信、通讯录等等。

使用系统的ContentProvider

1.获取ContentResolver实例

2.确定Uri的内容,并解析为具体的Uri实例

3.通过ContentResolver实例来调用相应的方法,传递相应的参数,但是第一个参数总是Uri,他制定了我们要操作的数据的具体地址

4.在AndroidManifest.xml中添加相应的权限

自定义ContentProvider

1.自定义MyContentProvider继承ContentProvider

2.定义用于访问内容的你的内容提供者URI地址

3.创建数据库来保存内容。(通常使用SQLite)

4.在AndroidManifest.xml中注册内容提供者(<provider.../>)

猜你喜欢

转载自blog.csdn.net/you943047219/article/details/88354560
今日推荐