Android总结——Android四大控件

Android四大组件都需要在manifest中进行注册才能生效

Activity

一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,一个应用程序通常由多个activities组成,他们通常是松耦合关系。

活动的注册

在manifest中进行注册

<activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

创建一个新应用程序使用Android SDK工具,存根activity自动为你创建,包含一个intent-filter,声明了activity响应”main”动作,并且应该被 放置 在”launcher”分类
元素指定这是一个”main”入口点对这个应用程序。元素指定,这个activity应该被列入系统应用程序列表中(为了允许用户启动这个activity)。

隐藏标题栏

在setContentView之前调用requestWindowFeature(Window.FEATURE_NO_TITLE)

启动一个活动

1.使用Intent显示启动
2.使用Intent隐式启动
需要在manifest中活动注册时候声明一个intent-filter,然后写一个唯一标识符,在活动中使用Intent启动
3.使用Intent隐式发送一份邮件、文件消息
详细内容可以参考:
http://blog.csdn.net/huashui16318/article/details/47783527

活动间传递数据

向下一个活动传递数据可通过intent.putExtra来传递数据。
如果是要启动第二个活动时发送数据给第一个活动,则需要通过startActivityForResult(intent,requestCode)(而不是startActivity())。然后从随后的activity接收结果,实现onActiviryResult()回调函数。当随后的activity完成,它返回一个结果给你的onActivityResult()函数通过一个intent。

活动的声明周期

http://blog.csdn.net/huashui16318/article/details/47760419

活动的启动模式

1.standard
不进行显示指定的情况下,所有活动都会自动使用这种启动模式。在这种模式下,每当启动一个新活动时,就会在返回栈中入栈,并处于栈顶位置。这种情况下系统不会在乎这个活动是否在返回栈中存在,每次启动都会创建该活动的新的实例。
2.singleTop
在manifest中

 <activity android:launchMode="singleTop">

在这种情况下,在启动活动时如果发现返回栈的栈顶已经是该活动,则可认为可以直接使用,而不会在创建新的活动实例。
3.singleTask
在manifest中

 <activity android:launchMode="singleTask">

在这种情况下,在启动活动时系统会首先在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动出栈,如果发现没有则会创建一个新的活动实例。
4.singleInstance
在manifest中

 <activity android:launchMode="singleInstance">

指定为该模式的活动会启动一个新的返回栈来管理这个活动。

销毁活动

可以写一个活动的控制类,在类中写单个方法,添加活动,移除某个活动,移除所有活动

 public class ActivityCollector{
        public static List<Activity>activities=new ArrayList<Activity>();
        public static void addActivity(Activity activity){
            activities.add(activity);
        }
        public static void removeActivity(Activity activity){
            activities.remove(activity);
        }
        public static void finishAll(){
            for (Activity activity:activities){
                if (!activity.isFinishing()){
                    activity.finish();
                }
            }
        }
    }

Service

用法

1.新建一个类并重写其onBind()方法(这是Service中唯一一个抽象方法)
2.重写Service中的
onCreate() 创建服务的时候调用
onStartCommand() 启动服务的时候调用
onDestroy() 服务销毁的时候调用

服务的生命周期

其实也就是新建服务类的时候重写的几个方法
这里写图片描述

服务的启动方式

• Context.startService()
• Context.bindService()

 1.  在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。

  2. 另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方法,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
  总结:
  1. startService()的目的是回调onStart()方法,onCreate() 方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate() 方法。

  2.  bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。

IntentService和Service

Service不是一个线程,不能直接处理耗时的操作
IntentService中重要的一个方法就是onHandleIntent。
当我们编写的耗时逻辑,不得不被service来管理的时候,就需要引入IntentService,IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行耗时操作。

BroadcastReceiver

两种注册方式

http://blog.csdn.net/liuhe688/article/details/6955668

ContentProvider

http://blog.csdn.net/huashui16318/article/details/48296531

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章