zoukankan      html  css  js  c++  java
  • Android四大组件

    1.Activity

    package com.mao.hello;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class HelloActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    }
    View Code
    创建Activity步骤:
    1.创建一个Activity就是创建一个类,且该类要继承Activity;
    
    2.需要复写其中的onCreate()方法;
    
    3.新建的Activity要在清单文件AndroidManifest.xml文件中注册;
    
    4.要为新建的Activity设置布局文件如main.xml
    View Code

    2.Service

    Service是一个后台运行的,没有界面的Android组件,可用于处理耗时操作。
    
    Service不是一个线程,有自己的生命周期。
    
    创建一个Service步骤:
    
    (1)创建一个类,继承Service。
    
    (2)在AndroidManifest.xml文件中配置<Serviec>3)复写相应的方法:
    
    abstract IBinder onBind():该方法是Service子类必须要实现的方法.
    
    void onCreate():当Service被创建时回调该方法.
    
    void onStartCommand():当Service被启动时回调该方法.
    
    void onDestroy():当Service被关闭前回调该方法.
    
    boolean onUnbind():当Service上绑定的所有客户端都断开连接时回调该方法. 
    View Code
     使用context.startService() 启动Service是会会经历:
    
    
          context.startService() ->onCreate()- >onStart()->Service running
    
          context.stopService() | ->onDestroy() ->Service stop
    
          如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
    
          stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。
    
          所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy
    
    
    使用使用context.bindService()启动Service会经历:
    
    
          context.bindService()->onCreate()->onBind()->Service running
    
          onUnbind() -> onDestroy() ->Service stop
    
          onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。
    
          所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
    
          在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
    View Code

    3.BroadcastReciever

    1.监听广播:
    
    Broadcast事件发生----系统自动创建对应的BroadcastReceiver实例[ 创建一个类,继承BroadcastReceiver类]--[设置action匹配Intent]--
    
    自动触发其onReceive()方法[重写该方法]----onReceive()执行完成[10s],实例被销毁.
    
    2.发送监听广播:
    
    (1)创建需要启动BroadcastReceiver的Intent
    
    (2)调用Context的sendBroadcast()或sendOrderedBroadcast()方法
    
    (3)重写BroadcastReceiver监听的onReceive()方法[监听]
    
    (4)[1]在AndroidManifest.xml中注册:(这种方式可实现后台全局监听):<reveiver.../><intent-filter../>
    
    [2]代码注册:(不会在后台监听)
    
    注册:registerReceiver(receiver, filter);
    
    取消:unregisterReceiver(receiver);
    
    3.Android内置了许多系统广播消息Broadcast Actions[主要用这些内置的]
    
    <intent-filter>是过滤器,过滤匹配的Broadcast Intent.(Intent包括action和data)
    View Code

    4.ContentResolver

    ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。
    View Code
    1.ContentProvider
    
      Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些Android提供的ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,当然前提是已获得适当的读取权限。
    
      主要方法:
    
      public boolean onCreate() 在创建ContentProvider时调用
    
          public Cursor query(Uri, String[], String, String[], String) 用于查询指定Uri的ContentProvider,返回一个Cursor
    
          public Uri insert(Uri, ContentValues) 用于添加数据到指定Uri的ContentProvider中
    
          public int update(Uri, ContentValues, String, String[]) 用于更新指定Uri的ContentProvider中的数据
    
          public int delete(Uri, String, String[]) 用于从指定Uri的ContentProvider中删除数据
    
          public String getType(Uri) 用于返回指定的Uri中的数据的MIME类型
    
    
      *如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头。
    
      例如:要得到所有person记录的Uri为content://contacts/person,那么返回的MIME类型字符串为"vnd.android.cursor.dir/person"。
    
      *如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头。
    
      例如:要得到id为10的person记录的Uri为content://contacts/person/10,那么返回的MIME类型字符串应为"vnd.android.cursor.item/person"。
    2.ContentResolver
    
      当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
    
          ContentResolver cr = getContentResolver();
    
          ContentResolver提供的方法和ContentProvider提供的方法对应的有以下几个方法。
    
          public Uri insert(Uri uri, ContentValues values) 用于添加数据到指定Uri的ContentProvider中。
    
          public int delete(Uri uri, String selection, String[] selectionArgs) 用于从指定Uri的ContentProvider中删除数据。
    
          public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 用于更新指定Uri的ContentProvider中的数据。
    
          public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 用于查询指定Uri的ContentProvider。
    3.Uri
    
      Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
    
      第一部分是"content://"。可以看作是网址中的"http://"。
    
      第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作是网址中的主机名,比如"blog.csdn.net"。
    
      第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。
        
    
  • 相关阅读:
    sqlserver服务 正在挂起更改,导致无法打开或者停止服务
    menuStrip与toolStrip的使用
    sqlDataCommandBuilder为dataGridView自动生成增删改代码时报错
    visual studio属性面板解释文字看不见
    窗体句柄 控件句柄
    form窗体show不出来
    TextBox密码框变文本框,文本框变密码框
    DataSet数据集手动添加一行记录
    Anaconda3-更换为清华源后依旧报错CondaHTTPError: HTTP 000 CONNECTION FAILED
    Kali Linux 国内源
  • 原文地址:https://www.cnblogs.com/lvk618/p/4085909.html
Copyright © 2011-2022 走看看