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"。
    
      第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。
        
    
  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/lvk618/p/4085909.html
Copyright © 2011-2022 走看看