zoukankan      html  css  js  c++  java
  • 菜鸟的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之旅。。。

  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/Lovetuya/p/2294443.html
Copyright © 2011-2022 走看看