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的简单介绍