Android应用程序组件

    技术2022-05-12  45

    激活组件:Intent

     

     

     

    当程序通过ContentResolver请求一个ContentProvider时,Android系统会启动被请求的目标ContentProvider。Android通过称为Intent的异步消息机制来启动其它三类组件:activity、service和broadcast receiver。intent是类Intent的对象,它持有激活某个组件的消息。对于activity,intent包含了请求的动作以及动作操作的数据的uri。例如,一个intent可能请求某个activity向用户展现一副图片或允许用户编辑文本。对于broadcast receiver,intent则表示通知broadcast receiver的命名动作。例如,当设备的照相机的快门键被按下时,Android会通知感兴趣的程序。 下面简单介绍一下激活其它三种不同组件的方法。 传递一个intent给Context.startActivity()方法或Activity.startActivityForResult()方法则会激活目标activity。activity可以调用方法Intent.getIntent()获取传递给activity的intent。如果需要传递额外的intent给activity时,Android会调用Activity的onNewIntent()方法。 通常一个activity会启动另外一个activity。如果启动另一个activity的activity期望从被启动的activity中返回一些结果,可以调用startActivityForResult()方法而不是调回startActivity()方法。例如,希望启动一个新的activity让用户选择一副图片,那么这个activity很可能会期望从另外一个activity中返回一副用户选择的图片。activity返回的结果会被保存在一个Intent中,这个Intent会被传递给activity的onActivityResult()方法。 调用Context.startService()方法并传递一个intent会启动一个service。Android系统会使用传递给startService方法intent来调用service的onService()方法。 同样,使用intent调用方法Context.bindService(),这会在调用此方法的组件和目标service之间建立一个连接,把目标service绑定到调用组件上。目标service会在onBind()方法中接受到传递过来的intent对象。 使用intent对象调用Context.sendBoradcast()、Context.sendOrderedBraodcast()和Context.sendStickyBroadcast()方法启动broadcast receiver。Android使用intent调用对此intent感兴趣的broadcast receiver的onReceiver()方法。 关闭组件 content provider在相应一个ContentResolver的请求时被激活,而braodcast receiver同样也是被感兴趣的intent激活,所以不需要显式地关闭这两种组件。 调用Activity的finish()方法就能关闭一个activity,一个activity调用finishActivity()则会关闭另外一个activity。 调用Service的stopSelf()方法或Content.stopService方法可以关闭一个service。 Android系统可能会在某些组件不再运行,或者为了保证某些优先级更高的组件能够正常运行而关闭某些组件。 清单文件 在Android能够启动某个组件之前,它必须能够知道相应的组件是否存在。每个Android应用程序都有一个清单文件,此文件中声明了应用程序中包含的组件。 清单文件是一个名为AndroidManifest.xml的xml文件。清单文件除了声明应用程序组件外,还能在清单文件中声明应用程序需要使用的第三方类库以及应用程序期望被授予的权限等等。

    最新回复(0)