android四大组件笔记

一、Activity

  1. Activity的生命周期:

     指Activity从启动到销毁的过程,在这个过程中,Activity一般表现为4种状态,分别

     是活动状态、暂停状态、停止状态和非活动状态。

     源码例子:

1 package com.augur.activitylifecycle; 

2 import android.app.Activity;  

3 import android.os.Bundle;  

4 public class ActivityLifeCycleDemo extends Activity{  

5    /**Activity启动后第一个被调用的函数,常用来进行Activity的初始话, 

6      *例如创建View、绑定数据或恢复信息等。*/  

7     public void onCreate(Bundle savedInstanceState) {  

8         super.onCreate(savedInstanceState);  

9     }  

10       

11     /**Activity显示在屏幕上时,该函数被调用*/  

12     protected void onStart() {  

13         super.onStart();  

14     }  

15       

16     /**Activity能够与用户交互,接受用户输入时,该函数被调用。 

17      * 此时的Activity位于Activity栈的栈顶*/  

18     protected void onResume() {  

19         super.onResume();  

20     }  

21       

22     /**Activity从停止状态进入活动状态前,调用该函数。*/  

23     protected void onRestart() {  

24         super.onRestart();  

25     }  

26       

27     /**Activity进入暂停状态时,该函数被调用。 

28      * 一般用来保存持久的数据或释放占用的资源*/  

29     protected void onPause() {  

30         super.onPause();  

31     }  

32       

33     /**Activity进入停止状态前,该函数被调用*/  

34     protected void onStop() {  

35         super.onStop();  

36     }  

37   

38     /**Activity被终止前,即进入非活动状态前,该函数被调用*/  

39     protected void onDestroy() {  

40         super.onDestroy();  

41     }  

42 }  

     

     以上方法调用顺序:onCreate() --> onStart() --> onResume() --> onPause() --> onStop() 

     --> onDestroy();

     注:当从Activity1 跳转到 Activity2中时,Activity的周期调用函数:onPause() --> 

          onStop();当从Activity2返回到Activity1中时,Activity 的周期调用函数:

          onRestart() --> onStart() -->onResume() 

  2. Activity的创建:

 创建一个Activity可以通过继承extends Activity类的方式来实现。一般创建一个新的

 android项目时,会自动生成一个Activity类。然后在子类中重写父类的OnCreate()

 法。在OnCreate()方法中初始化Activity。每创建一个Activity都必须在AndroidManifest

 文件中进行注册。

  3. 使用IntentActivity中启动另一个Activity 

     通过调用当前Activity父类继承而来的startActivity(Intent intent)方法来实现。此方法需

     要Intent对象作为参数,Intent的实例化方法:

        public Intent();

        public Intent(Context context,Class<?> cls);

     一般使用第二种构造。context:当前Activity对象;cls:将要启动的ActivityClass

     新的Activity组件必须在AndroidManifest.xml文件中进行注册。

  4. 使用IntentActivity之间传值

         1. Intent类提供了很多方法可以用来在不同的Activity间传递值:

             putCharSequenceArrayListExtra(name, value);

             putStringArrayListExtra(name, value);

             putIntegerArrayListExtra(name, value);

             putExtra(name, value);          .....

            其中,putExtra()方法被重载,可以传递多种值。

         2.在别一个Activity中接收传过来的值,例如取传来的String

             this.getIntent().getExtras().getString("myname");

             this.getIntent().getStringExtra("mysex");

            以上两种方式作用等同。

         3.如果希望得到另一个被调的Activity的返回值,则需要使用以下方法:

                     startActivityForResult(intent, 0);

           intent中保存传递信息和目标。0是状态码,自定义,后面返回值时要使用。

           然后需要在当前主调用Activity类中重写一个回调方法,方法定义如下:

              protected void onActivityResult(int requestCode, 

                              int resultCode, Intent data);

           返回的数据将被封装在Inten中,可根据resultCode判断返回状态。

  5. 关闭当前显示的Activity界面

       this.but2.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

finish();

}

});

        关闭界面一般采用按扭事件方式。其finish()方法并不会杀掉当前应用程序,只是

        相当于手机上的BACK(后退)键功能。 应用在后台还运行着。

  6. 界面之间的切换

        除了使用Intent可以在不同的Activity间跳转,达到界面切换的效果外,还能使用

        this.setContentView(R.layout.main);方式将当前界面切换。

 

二、Service服务(IntentService)

   1. 什么是Service?

       Service在后台运行,并不和用户进行交互。在默认情况下,Service运行在应用程序

       的主线程之中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将

       这些任务放在单独的线程中处理,避免阴塞用户界面。Service按启动方式来区分,

       有两种类型:StartedBound类型。

  2. Service的创建和停止

      Service的创建和Activity很相似。Service创建是通过继承android.app.Service

      类实现的。子类需要重写父类中的onStartCommand()onBind()方法。主要的

      业务逻辑就在这两个方法中实现。不同的启动方式决定着我们需要重写哪一个业务处

      理方法。 为了不阴塞用户界面,一般Service与多线程起并用。要停止当前服务,则

      只需要在启动它的Activity里面调用stopService(intent)方法。关键是intent对象,必

      须传的是要停止的intent对象,也就是之前启动的那个Intent对象,该方法返回一个

      表示是否停止服务的boolean值。但是这种停止服务的方法并不会马上停止在另一个

      线程中运行的服务,会等待线程运行完毕。也可以在启动的服务类中调用Service

      本身提供的一个stopSelf()

  3. StartedBound类型Service的区别:

      1. Started

           A、通过Activity类中的startService()方法来启动

           B、一旦启动就运行在后台,即使启动它的对象销毁了,也会执行完

           C、通常只启动,不返回值

           D、通常用于网络上传下载,操作完成后,自动退出

           E、需要重写父类中的onStartCommand()方法

      2. Bound:

           A、通过Activity类中的bindService()来绑定

           B、提供客户端服务器接口来启动

           C、发送请求,得到返回值,甚至通过IPC来通讯

           D、所有绑定者都通出,服务就退出。

           E、需要重写类父中的onBind()方法

  4. Service生命周期

      onCreate()----onStartCommand() / onBind()----onDestory()

 

三、ContentProvider内容提供器

    1. 简介:

        数据在android之中是程序私有的,ContentProvider提供了多个程序间数据交互的

        的机制,还暴露出来一些标准的API来对数据进行操作。ContentProvider使用表的

        形式来组织数据。

   2. android中的数据存储方式

        Share Preference:  基于XML文件

        Files:            二进制文件存储,用文件输入输出流

        SQLite:          轻量级数据库实现

        Network:         基于HTTP的网络存储,典型的IO操作

   3. SQLite

        1. SQLiteOpenHelper:是一个数据库帮且助类,常用方法如下:

           

          getReadableDatabase():创建或打开一个只读SQLiteDatabase数据库对象

          getWritableDatabase():创建或打开一个可读写SQLiteDatabase数据库对象

          onCreate()/onOpen()/onUpgrade():当发生相应的数据库操作时触发该方法。

          close():关闭任何的数据库联接。

        2. SQLite3支持的数据类型:SQLite允许忽略数据类型,但是,仍然建议在Create 

                Table语句中指定数 据类型,因为数据类型有利于增强程序的可读性。

                SQLite支持常见的数据类型,如

                   VARCHARNVARCHARTEXTINTEGER、 FLOATBOOLEAN

                   CLOBBLOBTIMESTAMPNUMERICVARYINGCHARACTER、 

                   NATl0NAI, VARYINGCHARACTER

                Android设备将发布时会有一个内部的SQLite数据库。这个数据库的目

                的是允许用户和开发者一个可以在活动中储存信息的地方。

        3. SQLiteDatabase:数据库操作类。可以对DB实现CURD操作。学用方法:

          close()、delete()、execSQL(String sql)、insert()query()update()等,非常类

          似于JDBC操作。需要注意的是,这里的CURD操作,有的需要ContentValues

          类的支持完成。

        4. ContentValues:对数据库操作时SQL语句的帮助类。是一个HashMap,通过

                           put()将数据存放在里面。传载参数用。里面可以存放键值对,

                           键表示“列名”,值表示对应列的“值”。

        5. Cursor:类似于JDBC中的ResultSet类。代表当前查询到的结果集,里面有

                    着相关的操作结果集的方法,常用方法下如:

                    getColumnCount():反回总的列数

                    getColumnNames():得到所有列名构成的数组

                    getCount():        得到游标(结果集)中所有记录的总数
                    getString(int columnIndex)、getInt(int columnIndex).....得到数据

                    isAfterLast()、isBeforeFirst():  在最后/前一行之后/

                    isNull(int columnIndex):  如果当前指示的列为空,返回true

                    moveToNext()、moveToFirst()、moveToLast():游标操作
   4. Share Preference
        SharedPreferences对象只要有应用的Context参数就可以创建。

        简单的获取对象: 

        因为activity本身就是一个Context,可以直接传Activity进去

        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);

        存储操作:

        pref.edit().putString("key", "my value").commit();

        获取属性:

        String value = pref.getString("key");

 

四、BroadcastReceiver广播接收系统

  1. 简介:

       BroadcastReceiver负责对外部事件做出响应,BroadcastReceiver是不可见的,没有

       UI界面。所有用户实现的BroadcastReceiver必须继承自系统的BroadcastReceiver

       类,并且需要在AndroidManifest.xml文件中注册。应用程序可以通过

       Context.sendBroadcast()将自已的Intent广播出去。

  2. 用应举列:

          第一步,在Activity中发送广播:

                Intent intent = new Intent();

intent.putExtra("name", "杨盘根");

intent.setAction(Intent.ACTION_EDIT);               

                context.sendBroadcast(intent);

          广播需要Intent的技持,所以需要一个Intent对象。它有两个大的作用,第一个

          就是传递数据。第二个是设置Action,用来表示广播出去的是什么动作。

          第二步,首先需要定义一个广播接收器,只要从BroadcastReceiver类继承,然

          后重写父类中的以下方法:

               public void onReceive(Context context, Intent intent); 

          在onReceive方法中对广播进行接收处理。Intent中可以传递数据。

          第三步:到AndroidManifest.xml文件中进行BroadcastReceiver进行注册。

            <receiver android:name=".BroadcastReceiverTest">

              <intent-filter >

                  <action android:name="android.intent.action.EDIT"/>

              </intent-filter>

            </receiver>

          这一步很重要,而且要注意注册的filter要和Activity中设置的Action相同,

          因为广播接收器是根据注册的filter类型来响应发送此类型广播的。如果是2.2

          以前的版本,还需要进行授权:

  <uses-permission android:name="android.permission.RECEIVE_SMS"/>

 

五、Intent对象(重要)

  1. 简介:

   Intent对象是个很重要的对象,四大组件中有三大组件都要依靠它。Intent一旦发出,

   Android都会准确找到相匹配的一个或多个ActivityServiceBroadcast-Receiver

   作为响应。所以,不同类型的Intent消息不会出现重叠:BroadcastIntent消息只会发

   送给BroadcastReceiver,而绝不可能发送给ActivityService。由startActivity()

   递的消息也只可能发送给Activity

  2. 作用

     (1)传递Intent启动一个ActivitystartActivity()startActivityForResult()

     (2)传递Intent启动一个ServicestartService()bindService()

     (3)通过Intent新加入一个广播:sendBroadcast()sendOrderedBroadcast()

                                    sendStickyBroadcast()

     (4)执行一个查询,ContentResolverquery()


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值