新浦京81707con > 首页 > 澳门新葡亰9810.com史上最精炼android四大组件基础

原标题:澳门新葡亰9810.com史上最精炼android四大组件基础

浏览次数:137 时间:2020-03-01

Android四大组件分别是Activity、Service、布罗兹CastReceiver和Content Provider。接下来就概括通晓下每一种组件吧。

来自:

活动状态

  1. 运维意况:活动处于栈顶
  2. 停顿状态:活动不处在栈顶,但仍然可以看到
  3. 悬停状态:完全不可以见到
  4. 销毁状态:离开重临栈

在每几个应用程序中,Activity能够说是不能缺少的存在,因为要显得内容,要与客商有相互作用行为,那几个都离不开Activity。Activity的启动选拔Intnet进行操作。分为显式Intent和隐式Intent。显式Intent的用法如下

以此小说主假设讲Android开发的第四次全国代表大会组件,本文重要分为

生存期

  1. onCreate()
  2. onStart(卡塔尔:不可知到可知调用
  3. onResume(State of Qatar:与客商进行相互作用,处于栈顶运行态
  4. onPause(State of Qatar:策画运营只怕复苏另一活动,
  5. onStop(卡塔尔(قطر‎:完全不可知的时候调用
  6. onDestory(State of Qatar:被销毁以前调用,之后成为销毁状态
  7. onRestart(State of Qatar:那一个点子由停下状态造成运营景况早先调用,也便是运动再度启航了

当Activity A到Activity B跳转时一旦那个时候内部存款和储蓄器远远不够,回笼了A,当大家按重临键时依旧会回到A,并且那时候实行的不是A的onRestart(卡塔尔(قطر‎。而是onCreate(卡塔尔(قطر‎.为了保存数据,我们得以回掉onSaveInstanceState(卡塔尔方法将数据放入bundle对象中,在onCreate(State of Qatar方法中有bundle参数举行获取

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);startActivity;

一、Activity详解
二、Service详解
三、Broadcast Receiver详解
四、Content Provider详解
叠合贰个根本器件 intent的详整。

一抬手一动脚的运营格局

在安插文件Activity中安顿launchMode属性

  1. standard 默许每便运维叁个新活动,它就能够在回来栈中入栈,并处于栈顶地点。假诺我们在四个Activity中跳转本身。点击几回成立之后,大家需连按叁次Back建能力脱离程序。
  2. singleTop消亡了暗中同意情状下,在栈顶还要成立不客观。约等于一旦Activity处于栈顶不成立,不处在栈顶就能重复成立。
  3. singleTask解决一个栈中有四个Activity实例,也正是若是发掘早就存在栈中就把那运动之上的通通出栈,未有则开创
  4. singleInstance钦赐为该情势的活动会运营一个新的回到栈来管理那些活动。
  • 行业内部广播:异步试行的播放
  • 有序广播:同步实行的播音(对于播放接受器是有前后相继顺序)

那样,就大功告成了从FirstActivity展开SecondActivity的作为,直接明了。隐式Intent就含蓄了无数,它并不明朗的提出要开动哪叁个Activity,而是钦命一应有尽有的action和category等新闻,然后交由系统去深入分析这一个Intent,寻找卓殊的Activity并运维。先是在AndroidManifest.xml文件的<activity>标签下布置<intent-filter>,能够钦命当前活动能够响应的action和category。

一、Activity详解
Activty的生命周期的也正是它所在经过的生命周期。

收到系统广播

  • 在代码中登记为动态注册
  • 在AndroidManifest.xml文件中登记时静态注册
<intent-filter> <action android:name="com.king.demo.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/></intent-fileter>

 

第一需求创设广播选用器

大家只必要新建二个类让它一而再接二连三BroadcastReceiver,相提并论写父类的onReceive(卡塔尔(有广播来时,那么些方法会得到实施State of Qatar方法就可以了。具体逻辑这些主意中拍卖,注意不能够写耗费时间操作要不然anr分外,如若急需我们得以运维三个劳动Service,不要使用新线程完结。因为广播接受器的生命周期异常的短。恐怕现身子线程还没终止,广播解释器已经淡出了。

  • 出殡广播:
    • 开创叁个IntentFilter 实例。并给他加多叁个action如:android.net.com.CONNECTIVITY_CHANGE(网络产生变化的播放卡塔尔(قطر‎,
    • 创设一个NetworkChangeReceiver(自定义的播音接受器类)的实例。
    • 调用registerReceiver()方法开展注册。将四个实例传进去。
    • 末尾记得动态注册广播接纳器一定要收回注册才行。在onDestory()方法中调用unregisterReceiver(State of Qatar方法来落到实处。

动态注册广播很灵敏不过存在劣势:一定要前后相继在开发银行现在才具选用到广播。因为注册逻辑是写在onCreate(卡塔尔方法中。所以有静态注册

  1. 率先大家自定义叁个广播接受器:定义叁个类BootCompleteReceiver继承布罗兹castReceiver。重写onReceiver(卡塔尔方法。里面写个Toast(卡塔尔国打字与印刷String。
  2. 在AndroidManifest.xml团长以此广播选拔器类名举行挂号。
  3. 新建三个<receiver>标签,通过android:name来钦点注册哪二个广播选拔器,然后在<intent-filter>标签步入想要选择的播音就能够了。
  4. Android系统运维实现后产生一条值为:android.intent.action.BOOT_COMPLETED的广播。因而将那些增多到<intent-filter>的<action>
  5. 那边还要求叁个权力:android.permission.RECEIVE_BOOT_COMPLETED权限。

此处大家指明当前Activity能够响应com.king.demo.ACTION_START以此action,而<category>标签是更加准确的十三分,独有两个同一时候相称时,本领开行activity。接下来让大家看看哪些利用Intent运转那个Activity

澳门新葡亰9810.com 1 

产生自定义广播

  • 出殡广播此前先定义四个播放选用器,並且展开挂号。action("com.zts.broadcast.MY_BROADCOAST");

  • 笔者们定义三个Button作为发送广播的触发点。

  • 在监听事件中调用

     Intent intent=new Intent("com.zts.broadcast.MY_BROADCOAST"); sendBroadcast;
    

由于广播是运用intent实行传递的,因而大家得以在intent中辅导数量传递给广播接纳器

  • 发送有序广播大家只供给退换一行代码,就要send布罗兹cast(卡塔尔国方法改成sendOrdered布罗兹cast(intent,nullState of Qatar
  • 本条时候广播接纳器就有前后相继顺序了,何况前边的广播选择器还是能将播放截断,阻止其后续散播。
  • 设置广播接受器的前后相继顺序
  • 在intent—filter标签中装置属性android:priority=100情趣是刚开始阶段级设成了100
  • 赢得了播音的优先权,大家得以阻挡继续散布,在onReceive方法中调用:abort布罗兹cast(卡塔尔;

android.intent.action.TIME_SET:系统时间被改造。android.intent.action.DATE_CHANGED:系统日期被更改。android.intent.action.BOOT_COMPLETED:系统运转完毕。android.intent.action.BATTERAV4Y_CHANGED:设备电量改换。android.intent.action.BATTEGL450Y_LOW:设备电量低。android.intent.action.ACTION_POWER_CONNECTED:设备连接电源。android.intent.action.ACTION_POWER_DISCONNECTED:设备断开电源。

android.provider.Telephony.SMS_RECEIVED:系统选取短信。android.intent.action.NEW_OUTGOING_CALL:拨打电话。android.intent.action.SCREEN_OFF当荧屏锁屏的时候触发android.intent.action.SCREEN_ON显示器解锁的时候触发android.intent.action.USEEvoque_PRESENT当客户重新唤起手持设备时触发ACTION_TIME_CHANGED:系统时间被转移ACTION_TIMEZONE_CHANGED:系统时区被校订ACTION_BOOT_COMPLETED:系统运行完成ACTION_PACKAGE_ADDED:系统增加包ACTION_PACKAGE_CHANGED:系统的包改成ACTION_PACKAGE_REMOVED:别的的包被删除ACTION_PACKAGE_RESTARTED:系统的包被重启ACTION_PACKAGE_DATA_CLEARED:系统的包数据被清空ACTION_SHUTDOWN:系统被关闭

Intent intent = new Intent("com.king.demo.ACTION_START");startActivity;

二个Activity的开发银行顺序:

动用本地广播

为了轻松消除广播安全性难题(自身广播被拦截,或放任物广播)。Local布罗兹caseManager()

  • 自己只要求先获得这么些处理类

    LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance;

  • 发出广播时用这些指标发送就可以localBroadcastManager.sendBroadcast;

  • 挂号和注销注册同样也是用那个目的去调用相应的措施

本土广播是力不能支透过静态注册方式去选用的。他的优势:

  1. 播音在大家前后相继内部,不必忧虑机密数据败露
  2. 别的的前后相继不恐怕将播放发送到大家之中
  3. 产生本地广播比起发送系统全局广播将会越来越赶快

那样就开动了含蓄上边<intent-fileter>的Activity。这里我们兴许会有疑难,那些Intent并未增多对应的category,为何还能够运转呢,那是因为android.intent.category.DEFAULT是一种私下认可的category,在调用startActivity(卡塔尔(قطر‎方法时会自动将那个category增加到Intent中。其次,Intent仍可以用于Activity之间传递数据。增添选用分别采取putExtra(卡塔尔和getStringExtra(State of Qatar方法,除了这五个办法之后,系统还提供了其他传递差别品类参数的办法,我们能够在API中自动查看。下叁个关于Activity首要的一部分正是Activity 的生命周期。

onCreate()——>onStart()——>onResume()

服务的主干用法

  • 新建三个MyService的类,并让她世襲Service当时要重写onBind(State of Qatar方法,我们得以重写如下方法:

  • onCreate(卡塔尔国:在服务创造的时候调用

  • onStartCommand(State of Qatar方法会在历次服务运维的时候调用

  • onDestory(State of Qatar方法会在服务销毁的时候调用(回笼不再利用的财富)

  • 急需在AndroidManifest.xml文件中登记才干一蹴而就

     <service android:name=".MyService"></service> 
    

一是一二是二也是依据Intent来兑现的

  • 初始服务

     startService(new Intent(this,MyService.class))
    
  • 悬停服务

     stopService(new Intent(this,MyService.class))
    
  • 如果我们想要让服务要好停止下来,只须求在MyService的别样叁个职分调用stopSelf(State of Qatar方法就能够让那么些服务甘休下来

为了让服务和平运动动愈发紧凑一点。

  • 先是在Activity中创建叁个瑟维斯Connection的无名类,在里面重写了OnServiceConnected(State of Qatar方法和onServiceDisconnected(卡塔尔方法。

  • 绑定服务我们调用的是(BIND_AUTO_CREATE表示活动和劳动开展绑定后活动创立服务)

     bindService(intent,connection,BIND_AUTO_CREATE);
    
  • 废除绑定

     unbindService(connection)
    

本条时候要用到的是onBind()方法。这边再次回到的靶子会在onServiceDisconnected(卡塔尔国这几个第二参数中

澳门新葡亰9810.com 2Activity的生命周期上面这么些图从Activity的情事结合Activity的回调方法,很好的演讲了Activity 的生命周期。这里须要注意的少数是,假诺须要对Activity的情景进行保存,就必要在onPause(State of Qatar这几个法子中开展,因为背后的onStop(State of Qatar和onDestroy(卡塔尔方法在奇特别情报况下,会不实行而直接甘休Activity。Activity的多种运维情势Android是应用栈来管理Activity的,这里运转形式正是指Activity入栈和出栈的情势。运转情势一共两种,能够由此在AndroidManifest.xml中给<activity>标签钦命android:launchMode属性来筛选运转方式。standard方式,暗中认可形式,纵然不内定android:lauchMode属性,私下认可便是采用这种运营方式,对于这种形式,每趟运行一个新的Activity,系统不会介怀这几个Activity的实例是还是不是已经存在栈中,每便运转都会创制八个该Activity的实例加入栈中。singleTop情势,当运转Activity时,假如开掘栈的栈顶为该Activity的实例,则不会创立新的实例,而是调用该Activity 的onNewIntent(卡塔尔国方法,重用该实例,其余情状,则创设该Activity的实例加入栈中。singleTask方式,假诺栈中有眼下Activity的实例,则调用该Activity的onNewIntent(State of Qatar方法,重用实例,并把在它之上的Activity 的实例全部移除;假若不设有,则创制新的实例,参加栈中。singleInstance方式,在三个新的栈中创立Activity的实例,并让多个使用分享该栈中该Activity的实例,一旦实例存在于有个别栈中,任何利用再试图创造该Activity都会援用该栈中的实例。

当另三个Activity运维时:
第一个Activity onPause()——>第二个Activity    onCreate()——>onStart()——>onResume() 
——>第一个Activity   onStop()

服务的生命周期

  • onCreate(State of Qatar 服务在此以前未曾创立过就能够先推行
  • onStartCommand(卡塔尔国方法试行每一次调用start瑟维斯()就能实践。不过依然只存在多个实例
  • onBind(State of Qatar:在Context的bindService()调用时就能进行该方法
  • onDestory(卡塔尔: 调用startService后再调用stop瑟维斯(State of Qatar时就能够实行,调用bindService后又调用unbindService()也会试行

当调用了startService()又调用bindService(卡塔尔(قطر‎那时候独有当四个同时调用stopService和unbindService(卡塔尔国.onDestory(State of Qatar才会推行。

服务是Android中得以完结程序后台运营的减轻方案。服务的运作不依据于别的顾客分界面,就算程序被切换成后台,大概打开其余叁个主次,服务还是能够够保险正规运作。服务不会自动开启线程,全体的代码都以私下认可运行在主线程中的。大家须要在劳务中手动创造子线程,来实践一些耗费时间职责。一旦在类型中随飞机位置置调用了Context的startService(卡塔尔方法,相应的服务就能够运维,并且回调onStartCommand()方法。假若那一个服务以前没有成立过,则onCreate(卡塔尔国方法会先于onStartCommand(卡塔尔国方法实施。服务运转之后会平昔维系运营,知道stopService(卡塔尔国或stopSelf(卡塔尔(قطر‎方法被调用。纵然每一遍调用start瑟维斯(卡塔尔国方法都会调用onStartCommand(State of Qatar方法,但是各种服务实在只存在一个实例,所以不管调用多少次startService(State of Qatar方法,都只要求调用一次stopService(卡塔尔(قطر‎或stopSelf(卡塔尔国方法来终止服务。还足以调用bindService(卡塔尔来赢得多个劳动的一心一德连接,当时就能回调服务中的onBind(卡塔尔(قطر‎方法。若是这么些服务在此以前未曾开创,则会先调用onCreate(卡塔尔国方法。之后,调用方能够拿走到onBind(卡塔尔(قطر‎方法再次回到的IBinder对象的实例,那样就能够与服务开展通信,只要调用方和劳务的三番五次未有断开,服务就能够直接保持运维。

当再次来到到首个Activity时:
第二个Activity onPause() ——> 第一个Activity onRestart()——>onStart()——>onResume() 
——>第二个Activity   onStop()——>onDestroy()

动用前台服务

前台服务和通平常服装务最大的界别在于,它会直接有多个正在运营的图标在系统状态栏突显,下拉景色栏后能够看到更为详细的新闻,特别肖似于公告的机能。比如:墨迹天气,它的劳动后台更新天气数据的还要,还恐怕会在系统状态栏一贯显示当前的天气新闻

十分重要分为标准广播和平稳广播。职业广播是一种截然异步施行的广播,在广播发出之后,全部的播音采纳器差没多少都会在同期选用到那条广播消息,由此它们中间从未前后相继顺序之分。有序广播是一种协同实施的播放,在播放发出之后一律时刻唯有叁个播放接纳器能够收到到那条音讯,当这些广播选择器试行到位之后,能够筛选继续传递,或许阻止该广播。那时的播放选用器是有优先顺序的,通过定义<intent-filter>标签的品质android:priority来设置优先级。

贰个Activity的销毁顺序:
(情况一)onPause()——><Process Killed> 
(情况二)onPause()——>onStop()——><Process Killed> 
(情况三)onPause()——>onStop()——>onDestroy()

IntentService

Android中的瑟维斯是用于后台服务的,当应用程序被挂到后台的时候,为了确认保证应用有些零部件依然能够干活而引进了瑟维斯那一个概念,那么这里面要重申的是Service不是独自的进程,亦不是单独的线程,它是注重于应用程序的主线程的,也正是说,在愈来愈多时候不建议在Service中编辑耗费时间的逻辑和操作,不然会挑起AN昂科雷(Application Not RespondingState of Qatar。那么大家当大家编辑的耗费时间逻辑,必须要被service来保管的时候,在Service运维三个新子线程,在子线程完毕耗费时间操作。就需求引进IntentService

  • IntentService是继续Service的,那么它饱含了Service的满贯特点,当然也带有service的生命周期,
  • 那就是说与service差别的是,IntentService在履行onCreate操作的时候,内部开了三个线程
  • 去你试行你的耗费时间操作。该线程有限支撑同偶然刻只管理二个Intent.这样IntentService不会窒碍主线程。
  • IntentService的施用和Service是周围。它须要重写onHandleIntent(Intent intent卡塔尔方法。

** 为存款和储蓄和获取数据提供统一的接口,能够在差异的应用程序之间分享数据。**ContentProvide对数码实行打包,不用关怀数据存款和储蓄的内部原因。使用表的样式来协会数量。Android为一些广阔的数码提供了暗中认可的ContentProvider,比方音频、录制、联系人等。当使用要求通过ContentProvider对外共享数据时,第一步要求后续ContentProvider等量齐观写下边方法:

  每多少个运动( Activity )都处在某三个景观,对于开辟者来讲,是不能调整其应用程序处于某二个景况的,那么些均由系统来成功。

内容提供器简要介绍

当系统布置三个Android应用之后,有时候就须要在分歧的施用之间分享数据,比方以后有八个短信选用选用,顾客想把选拔到的面生短信的发信人加多到联系人管理选拔中,就供给分化选择之间分享数据。对于这种需求在差别应用之间分享数据的需要,能够让一个应用程序直接去操作其它三个应用程序所记录的数额 1 举个例子操作它所记录的SharedPreferences,文件或数据库等。这种方法呈现太拉杂了。2 不一应用程序记录数据的法子差别非常大,这种措施不平价应用程序之间进行数据调换。

为了在应用程序之间调换数据,Android提供了ContentProvider,ContentProvider是例外应用程序之间张开数据沟通的正规API,当二个应用程序须要把团结的数据暴光给任何程序接纳时,该应用程序就可通过提供ContentProvider来实现,其余应用程序可通过ContentResolver来操作ContentProvider揭穿的数目

  • 回顾增添数量

  • 除去数据

  • 修改数据

  • 询问数据等。

    ContentProvider也是Android应用的四大组件之一,须求在AndroidManifest.xml文件中举行配置.Android已经为遍布的一对多少提供了私下认可的ContentProvider.比如说短信,电话,多媒体等

  • 开发ContentProvider

  • :定义本身的ContentProvider类,该类世袭ContentProvider基类

  • :暴光ContentProvider提供的数量* 重写onCreate(卡塔尔(قطر‎:该方法在ContentProvider创造后被调用

    • 重写getType(卡塔尔:该办法用于再次回到当前Uri所代表的数目标MIME类型,要是该Uri对应的数码大概蕴含多条记下,那么MIME类型字符串应用以vnd.android.cursor.dir/先河假使该Uri对应的多少只包涵一条记下,那么MIME类型字符串应用以vnd.android.cursor.item/伊始
    • 重写insert(Uri,ContentValue values卡塔尔:依据Uri插入values对应的数额
    • 重写delete(Uri,String selection,String[] selectArgs卡塔尔(قطر‎:根据Uri删除select条件格外的上上下下笔录
    • 重写update(State of Qatar:依照Uri改进select条件所相配的万事记下
    • 重写query(卡塔尔(قطر‎:依照Uri查询出select条件所匹配的全方位记录

    细心:重写的那几个主意并非给该应用自身调用的,而是供其余使用来调用。

  • 其三步:在AndroidManifest.xml文件中登记该ContentProvider,内定android:authorities属性<provider android:name=""authorities=""android:exported/>

  • .Uri:用于表示那么些ContentProvider所提供的数据

     Uri:统一资源标识符 --URL:统一资源定位符 --URN:统一资源命名符 如:http://www.baidu.com/index.html http:// 是URL的协议部分,是固定的 www.baidu.com是域名部分,是固定的 index.html是网站资源部分,是动态的
    

而ContentProvider提供的Uri,例如:

如:content://com.briup.dictprovider/users

content://是Uri的协议部分,暴露ContentProvider,访问contentProvider的协议默认是content://,这个部分是固定的。com.briup.dictprovider:是ContentProvider的authority。 系统就是由这个部分找到操作哪个ContentProvider. 只要访问指定的ContentProvider,这个部分总是固定的。users:是资源部分,当访问者需要访问不同资源时, 这个部分是动态改变的。

Uri提供了parse(卡塔尔国静态方法,能够将字符串转变为Uri:Uri uri = Uri.parse("content://com.briup.dictprovider/user/2"卡塔尔(قطر‎;

  • .ContentResolver通过ContentResolver来操作ContentProvider所揭发的数量运用手续:第一步通过Context中获得ContentResolver对象:getContentResolver(卡塔尔国第二步调用ContentResolver中相应的艺术:insert,delete,update,query

本文由新浦京81707con发布于首页,转载请注明出处:澳门新葡亰9810.com史上最精炼android四大组件基础

关键词: 新浦京81707con Android 知识点 组件 一遍

上一篇:Android通知

下一篇:没有了