Android四大组件是一个android app 最基本的组成部分,这篇博客主要给大家简单的介绍一下四种组件
(1)Activities
(2)Services
(3)BroadcastReceiver
(4)ContentProvider
(1)Activities
我们先看看 android api guide 对Activities的简单介绍
就像上面所描述,你所使用的App中所看到的屏幕内容其实就是一个Activity,至于Activity的生命周期分析以及注意点,大家可以从我的博客《Android开发艺术探索》读书笔记之Activity的生命周期 了解,今天这里主要是想和大家研究一下另类的Activity—”Fragments“
Fragment非常的类似于Activity,有着自己的生命周期,拥有自己的布局,本身可以作为事件监听器,在android 3.0(API lever 11)并没有Fragment,都是用Activity来表示用户页面,这就造成了一个问题,想象一下,同样的一个程序,在小屏幕手机上可能看起来非常的合适,但是你把程序移植到平板电脑上呢,这时候很有可能图片变形啦,感觉分辨率变低啦,控件之间的间距变大啦,为了给用户在大屏幕手机上更好的用户体验,Android在android 3.0(API lever 11)的时候引入了Fragment,Fragments嵌套在Activity中使用。先简单介绍下fragment的生命周期。
onAttach():当该Fragment被添加到Activity时被回调,该方法只会被回调一次
onCreate(Bundle SavedStatus):创建Fragment事被回调,该方法只会被调用一次
onCreateView():每次创建,绘制该Fragment的View组件时回调该方法,Fragment将会显示该方法返回的View组件
onActivityCreated():当Fragment所在的Activity被启动后回调该方法
onStart():启动Fragment时被回调
onResume():恢复Fragment时被回调,onStart()方法后一定会回调onResume()方法
onPause():暂停Fragment时被回调
onStop():停止Fragment时被回调
onDestroyView():销毁该Fragment所包含的View组件时被调用
onDestroy():销毁Fragment时被回调,该方法只会被调用一次
onDetach():将该Fragment从Activity中被删除,被替换完成时回调该方法,该方法只会被调用一次。
Activity,Fragment两者都有自己的生命周期,上面说了Fragment是嵌套到Activity中使用的,那两者的生命周期有什么联系吗?
API里的一张图很好的说明了两者之间的关系。
那么到底怎么把Fragment添加到Activity中呢?主要有两种方法,一种是静态加载,另外一种是动态加载,先来看看静态加载Fragment,静态加载Fragment就是将Fragment当成普通的UI控件放到界面Layout中,如下面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:weightSum="1"> <fragment android:name="com.keranbin.androidtrain.LeftFragment" android:layout_width="0dp" android:id="@+id/left_fragment" android:layout_height="match_parent" android:tag="LEFT" android:layout_weight="0.3"></fragment> <fragment android:name="com.keranbin.androidtrain.RightFragment" android:layout_width="0dp" android:id="@+id/right_fragment" android:tag="Right" android:layout_height="match_parent" android:layout_weight="0.7"></fragment> </LinearLayout>
使用静态方式加载Fragment,当Activity创造Activity的Layout时,它会通过android:name找到相应的Fragment然后再在其onCreateView中取得该Fragment的页面布局文件加载在当前<fragment>中,另外需要注意的一点是,每个Fragment都需要一个独一无二的标志以便系统能找到该Fragment,其中有三种方式来赋予Fragment一个标志。
1:android:id
2:android:tag
3:android:id 和android:tag 这种情况下,系统会使用android:id,其实和1一样。
除了静态加载Fragment之外,还有动态加载Fragment,个人觉得,动态加载Fragment更加的灵活点。
package com.keranbin.androidtrain; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { FragmentManager fm; FragmentTransaction ft; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFragments(); } /** * initiate the LeftFragment and RightFragment */ private void initFragments() { fm=getSupportFragmentManager(); ft=fm.beginTransaction(); LeftFragment lFragment=new LeftFragment(); ft.add(R.id.left_fragment,lFragment,"LEFT"); RightFragment rFragment=new RightFragment(); ft.add(R.id.right_fragment,rFragment,"RIGHT");
ft.commit(); } }
Fragment暂时就介绍这么多,具体的会在Demo中讲诉。
(2)Services
看看 android api guide 对Activities的简单介绍