远程实习-第二周学习报告
本次为远程实习的第二周学习总结报告,以下是本周的任务目标:
- 熟悉使用Android四大组件和Fragment
- 熟悉常用View控件,support包新控件
1. Android四大组件
Activity
使用场景
作为实现应用功能的主要组件,主要职责是完成于用户的交互,进行UI相关的逻辑处理,并将处理操作分发到其他组件起到一个类似中枢的作用。
生命周期
启动方式
目前启动一个Activity有两种方式,一种是在Manifest中指定Launcher,在我们点击应用图标时启动,另一种就是在应用中调用startActivity启动,而使用startActivity还可以使用显式,即指定某一具体Activity,或者隐式,只设定需要哪种类型的Activity。
BroadcastRecevier
使用场景
广播监听器没有界面,并且监听到后只有短短几秒的生命周期,所以广播监听器更多的是起到一个监听事件发生,然后将处理转交给其他组件的作用。
使用步骤
注册广播事件
注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。
发送广播事件
通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
接收广播事件
当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
Service
使用场景
Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:
1.并不依赖于用户可视的UI界面。(当然也有少部分需要前台的)
2.具有较长时间的运行特性。
启动方式
Services有两种启动形式:
Started:其他组件调用startService()方法启动一个Service。一旦启动,Service将一直运行在后台(run in the background indefinitely)即便启动Service的组件已被destroy。通常,一个被start的Service会在后台执行单独的操作,也并不给启动它的组件返回结果。比如说,一个start的Service执行在后台下载或上传一个文件的操作,完成之后,Service应自己停止。
Bound:其他组件调用bindService()方法绑定一个Service。通过绑定方式启动的Service是一个client-server结构,该Service可以与绑定它的组件进行交互。一个bound service仅在有组件与其绑定时才会运行(A bound service runs only as long as another application component is bound to it),多个组件可与一个service绑定,service不再与任何组件绑定时,该service会被destroy。
ContentProvider
使用场景
为存储和获取数据提供统一的接口。可以在不同的应用程序之间共享数据。Android已经为常见的一些数据提供了默认的ContentProvider。
ContentProvider使用表的形式来组织数据
无论数据的来源是什么,ContentProvider都会认为是一种表,然后把数据组织成表格
- ContentProvider提供的方法
query:查询
insert:插入
update:更新
delete:删除
getType:得到数据类型
onCreate:创建数据时调用的回调函数
- 每个ContentProvider都有一个公共的URI
这个URI用于表示这个ContentProvider所提供的数据。Android所提供的ContentProvider都存放在android.provider包当中
Fragment
使用场景
Fragment刚出现的时候是为了解决平板以及各种不同尺寸屏幕的适配问题,在手机中就显示一个List Fragment然后点击再显示content Fragment ,而平板屏幕比较大就可以左边是一个List Fragment右边是一个Content Fragment这样。但是其实现在后续更新了很多组件都可以直接依赖于Fragment比如使用ViewPager+Fragment+TabLayout实现导航栏效果等等。
生命周期
Fragment和Activity的生命周期很像
使用方式
有两种,可以使用静态的方式,在xml布局文件中使用标签,设置class属性后就可以指定使用的Fragment类。
也可以使用动态加载的方式,在Activity中获取FragmentManager然后就可以为布局(通常是FrameLayout)进行Fragment的add,replace,hide等操作了,比起静态方式更加灵活。
2. 常用的View以及support控件
soupport包
Android随着版本的迭代更新,不断推出了体验更会更美观也更稳定的组件,但是这些组件在低版本的系统是无法使用的,所以为了向下兼容就在support中实现了这些新组件的替代,然后统一使用support包,就可以解决这问题了。
- Android Support v4
这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认带有了。
- Android Support v7
这个包是为了考虑照顾2.1及以上版本而设计的,但不包含更低,故如果不考虑1.6,我们可以采用再加上这个包,另外注意,v7是要依赖v4这个包的,即,两个得同时被包含。
- Android Support v13
这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到。
关于support的组件一般都是各种常用的部件,比如侧滑实现的DrawerLayout,Fragment等等,在这就不介绍了。
Material Desgin
在5.0后,Android还提出的Meterial Design的新概念,同时也推出了新的design包,提供了新的组件。
因为时间关系只是简单了学习了一点控件
NavigtaionView
NavgtionView与DrawableLayout结合实现侧滑菜单
使用简单了很多,可以在xml中为NavigationView可以直接为head简介部分设置layout,下面的选项用menu.xml格式来写:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/favorite"
android:icon="@mipmap/ic_launcher"
android:title="收藏"/>
<item
android:id="@+id/wallet"
android:icon="@mipmap/ic_launcher"
android:title="钱包"/>
<item
android:id="@+id/photo"
android:icon="@mipmap/ic_launcher"
android:title="相册"/>
<item
android:id="@+id/file"
android:icon="@mipmap/ic_launcher"
android:title="文件"/>
</menu>
真是一目了然,非常方便。
本来我在想网易云可能也用了这个,但是发现网易云的item里还有小红点以及switch等额外控件,可能还是用自己的控件吧。