android(一)应用基础知识
本文最后更新于:1 年前
应用组件
activity
活动(activity)是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用
setContentView()
方法来完成界面的显示;以此来为用户提供交互的入口。一个activity就是一个单独的窗口
activity之间通过intent进行通信
需要在AndroidManifest.xml配置相关信息
存在自己的生命周期
service
通常用作在后台处理耗时的逻辑,与Activity一样,它存在自己的生命周期,也需要在AndroidManifest.xml配置相关信息。
是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。
并不运行在一个独立的进程当中,依赖于创建服务时所在的应用程序进程。某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行
两种启动方式
startService()
和bindService()
种类 功能 startService()
由其他组件调用 startService()
方法启动的,这导致服务的onStartCommand()
方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()
方法停止,或者由其他组件调用stopService()
方法停止。bindService()
调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。 Service组件:没有GUI;需要继承Service基类;通常用于为其他组件提供后台服务或监控其他组件的运行状态。
广播接收者(Broadcast receiver)
在Android中,广播是一种广泛运用的在应用程序之间传输信息的机制。而广播接收器是对发送出来的广播进行过滤接受并响应的一类组件。
- 可以使用广播接收器对外部事件进行过滤,只对感兴趣的外部事件进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或service来响应它们收到的信息,或者用NotificationManager来通知用户
- 两种注册方法:
- 程序动态注册(在运行时的代码中使用
Context.registerReceive()
进行注册):当用来注册的Activity关掉后,广播随即失效 - AndroidManifest.xml文件中进行静态注册:只要设备是开启状态,广播接收器也是打开着的。即如果app本身未启动,该app订阅的广播在触发时也会对它起作用
- 程序动态注册(在运行时的代码中使用
内容提供者(Content provider)
android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据
只有需要在多个应用程序间共享数据是才需要内容提供者
ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见
开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作
ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理
启动方法
每种组件都有不同的启动方法:
- 如要启动 Activity,您可以向
startActivity()
或startActivityForResult()
传递Intent
(当您想让 Activity 返回结果时),或者为其安排新任务。 - 在 Android 5.0(API 级别 21)及更高版本中,您可以使用
JobScheduler
类来调度操作。对于早期 Android 版本,您可以通过向startService()
传递Intent
来启动服务(或对执行中的服务下达新指令)。您也可通过向将bindService()
传递Intent
来绑定到该服务。 - 您可以通过向
sendBroadcast()
、sendOrderedBroadcast()
或sendStickyBroadcast()
等方法传递Intent
来发起广播。 - 您可以通过在
ContentResolver
上调用query()
,对内容提供程序执行查询。
Intent和Intent过滤器
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!