• 菜鸟的Android 学习笔记 之四大组件总结


    Activity :

    activity是Android提供的界面,所有和用户交互的事情都发生在这个类。

     

    Activity的生命周期:

    OnCreate() 创建的时候会调用这个方法 设置这个Activity设置布局控件,初始化数据等。

    OnStart() 当控件被我们看到的时候,就调用OnStart()方法 在OnCreate()之后 或者OnStop()后调用。

    OnResume() 当重新获得用户焦点的时候就调用这个方法。

    onPause() 保护现场用的 可能被另外一个透明的Dialog窗口覆盖,失去焦点,但是他仍然和窗口管理器保持连接,系统可以继续保护Activity的内部状态。

    onStop()  停止和OnStart()对应,注意OnStop()和OnPause()不一样的地方是他是完全被另外一个窗口覆灭。也就是失去焦点而且不可见。

    onDestory()销毁

     

    创建一个Activity的要点

    1.一个Activity就是一个类,并且这个类要继承Activity

    2.需要复写onCreate方法

    3.要在Androidmanifest.xml进行配置(四大组件都要进行配置)

    4.为Activity添加必要的控件

     

    在一个Activity启动另外一个Activity

    Intent intent=new Intent(CurrentActivity.this,OtherActivity.class) //OtherActivity也要在AndroidManifest.xml中注册。

    startActivity(intent);

    Intent还可以放入各种数据 传入下一个Activity。

     

    可以用下面的方式接收传过来的数据:

     

    还可以用Bundel的方法发送数据。Bundel就像一个承载数据的List<> 里面可以放各种数据。但是他的key只能是string类型的,放入Intent的方式也是intent.putExtra(bundle);

     

     

    Service

    Service在什么时候会用到呢?比如说音乐程序的时候,需要后台运行,但是又看不到界面,此时就用到Service。这也是Service和Activity最大的不同。

     

    Service 分类:

    本地Service和远程Service。

    本地Service是同一个进程内Service彼此之间共同的内存区域。

    远程Service是同一个系统内的不同进程之间访问(注意是同一个系统内,不是不同系统)。

     

    Service生命周期:

    onCreate()->onStart()->onDestory() 三个方法 继承的时候如果要用到记得重新写下。

     

    创建一个Service要点:

    1.  创建一个类,要继承Service

    2.  要在androidManifest.xml中进行配置

    3.  在Activity中配置调用它

     

    Broadcast Receiver

    在android中可以通过broadcast告诉其他程序发生了什么事情。比如电源,比如短信,比如信号。

    Broadcast Receiver相比于其他组件比较特别的地方是他还提供了一种所谓的热注册,就是不用写在androidManifest.xml中,直接用

    registerReceiver(Broadcastreceiver,IntentFilter)注册。然后用unregisterReceiver()消除注册。

     

    一些常用的Action:

    ACTION_CALL                                              activity                        启动一个电话.
    ACTION_EDIT                                               activity                       显示用户编辑的数据.
    ACTION_MAIN                                               activity                      作为Task中第一个

    Activity启动
    ACTION_SYNC                                             activity                         同步手机与数据服务器上的数据.
    ACTION_BATTERY_LOW                           broadcast receiver       电池电量过低警告.
    ACTION_HEADSET_PLUG                        broadcast receiver        插拔耳机警告
    ACTION_SCREEN_ON                               broadcast receiver        屏幕变亮警告.
    ACTION_TIMEZONE_CHANGED              broadcast receiver         改变时区警告.

     

    Content Provider

    这个组件比较复杂

    ContentProvider可以支持多个应用的数据共享。可以用来操作音频,视频,图片,私人通讯录等等。但是要记得获取适当的读取权限。当然也可以用来公开自己的数据。(难道Content Provider是全局变量?整个手机的程序都能访问得到?)

     

    创建Content Provider 要点:

    1.  创建一个Content Provider首先要继承ContentProvider类。

    2.       在androidManifest中配置

    3.       在Activity类中调用insert() query()可以调用

    实际上所有的contentprovider用户都不能直接访问contentprovider实例,只能通过ContentResolver的中间代理。而要得到ContentResolver的实例可以用Activity的getContentResolver方法。如下

    可以自己去调用ContentProvider相应的方法。

    Uri使用方法:来自http://blog.sina.com.cn/s/blog_5688414b0100xagp.html

    为系统的每一个资源给其一个名字,比方说通话记录。

    1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。 

    2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D 4个部分:

    A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;"content://"

     B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"

    C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就ok了

    "content://hx.android.text.myprovider/tablename"

    D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#" #表示数据id

    数据模型:

    ContentProvider返回的数据结构是Cursor类似于DataSet,每一个contentprovider 定义一个唯一公开的URI,用于指定他的数据集。一个contentprovider可以包含多个数据集。这样就需要多个URI与之对应。URI的开头必须是 “content://”

    表示这个Uri指定一个contentprovider。

    增删查改:

     

    查询

    Cursor cursor = getContentResolver().query(

    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null,null);

    得到查询数据:

    Cursor.moveToNext()读取到下一条 类似于C#的sdr.read()

    条件发在哪里?

    可以放在                                                                                                              

    修改:

    插入:

    数据放在values内,values是键值对。如下:

    ContentValues values = new ContentValues();

    values.put(People.NAME, "Abraham Lincoln");

    Uri uri = getContentResolver().insert(People.CONTENT_URI, values);

     错误应该很多 求指点....刚刚开始的Android之旅。。。

  • 相关阅读:
    小学四则运算编程实践
    熟悉编程语言
    俄罗斯方块游戏(修改为无敌版)
    2020-2021-1 20201212《信息安全专业导论》第八周学习总结
    如何学好编程
    python day 4 turtle
    python day 3
    20191206《信息安全专业导论》第五周学习总结
    20191206《信息安全专业导论》第四周学习总结
    20191206《信息安全专业导论》第三周学习总结
  • 原文地址:https://www.cnblogs.com/Lovetuya/p/2294443.html
Copyright © 2020-2023  润新知