协程
协程协程的基本用法Kotlin并没有将协程纳入标准库的API当中,而是以依赖库的形式提供的。所以如果我们想要使 用协程功能,需要先在app/build.gradle文件当中添加如下依赖库:
dependencies { ... implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1" ) implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1") }
第二个依赖库是在Android项目中才会用到的,本节我们编写的代码示例都是纯Kotlin程序,所 以其实用不到第二个依赖库。但为了下次在Android项目中使用协程时不再单独进行说明,这里就一同引入进来了。
接下来创建一个CoroutinesTest.kt文件,并定义一个main()函数,然后开始我们的协程之旅 吧。
首先我们要面临的第一个问题就是,如何开启一个协程?最简 ...
Android网络
网络WebView的用法借助它我们就可以 在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页。
新建一个 WebViewTest项目,然后修改activity_main.xml中的代码,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent"> <WebView android:id="@id/webView" android:layout_width = "match_parent" android:layout_height = "match_parent&quo ...
探究Service
ServiceService是什么Service是Android中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互而 且还要求长期运行的任务。Service的运行不依赖于任何用户界面,即使程序被切换到后台,或 者用户打开了另外一个应用程序,Service仍然能够保持正常运行。
不过需要注意的是,Service并不是运行在一个独立的进程当中的,而是依赖于创建Service时 所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行。
另外,也不要被Service的后台概念所迷惑,实际上Service并不会自动开启线程,所有的代码都是默认运行在主线程当中的。也就是说,我们需要在Service的内部手动创建子线程,并在这里执行具体的任务,否则就有可能出现主线程被阻塞的情况。
Android多线程编程当我们需要执行一些耗时操作,比如发 起一条网络请求时,考虑到网速等其他原因,服务器未必能够立刻响应我们的请求,如果不将 这类操作放在子线程里运行,就会导致主线程被阻塞,从而影响用户对软件的正常使用。
线程的基本用法义一 个线程只需要新建一个类继承自 ...
运用手机多媒体
运用手机多媒体将程序运行到手机上进入“关于手机”界面,然 后对着最下面的版本号那一栏连续点击,就会让开发者选项显示出来。然后进入设置→系统→ 开发者选项界面,并在这个界面中选中USB调试选项。
使用通知创建通知渠道通知渠道:每条通知都要属于一个对应的渠道
创建通知渠道的详细步骤首先需要一个NotificationManager对通知进行管理,可以通过调用Context的getSystemService()方法获取。getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,传入Context.NOTIFICATION_SERVICE即可。
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
接下来要使用NotificationChannel类构建一个通知渠道,并调用NotificationManager的createNotificationChannel()方法完成创建。由于NotificationChannel类和createNotifica ...
探究ContentProvider
ContentProvider简介ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的 机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。目前,使 用ContentProvider是Android实现跨程序共享数据的标准方式。
运行时权限Android权限机制详解首先回顾一下过去Android的权限机制。我们在第6章写BroadcastTest项目的时候第一次接触 了Android权限相关的内容,当时为了要监听开机广播,我们在AndroidManifest.xml文件中 添加了这样一句权限声明:
<manifest xmlns:android="http://shemas.android.com/apk/res/android" packate="com.example.broadcasttest"> <uses-permission android:name="android.permission.RECEIVE_BOOT_C ...
持久化技术
持久化技术持久化技术简介数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机 的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设 备中的数据是处于持久状态的。持久化技术提供了一种机制,可以让数据在瞬时状态和持久状 态之间进行转换。
文件存储文件存储是Android中最基本的数据存储方式,它不对存储的内容进行任何格式化处理,所有数 据都是原封不动地保存到文件当中的,因而它比较适合存储一些简单的文本数据或二进制数 据。如果你想使用文件存储的方式来保存一些较为复杂的结构化数据,就需要定义一套自己的 格式规范,方便之后将数据从文件中重新解析出来。
将数据存储到文件中Context类提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。接收两个参数:第一个参数是文件名,不能包含路径;第二个参数是文件的操作模式,主要有MODE_PRIVATE和MODE_APPEND两种模式可选,默认是MODE_PRIVATE,表示当指定相同文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示文件已 ...
探究BroadcastReceiver
BroadcastReceiver广播机制简介Android中的每个应用程序都可以对自己 感兴趣的广播进行注册,这样该程序就只会收到自己所关心的广播内容,这些广播可能是来自 于系统的,也可能是来自于其他应用程序的。而接收广播的方法则需要引入一个新的概念—— BroadcastReceiver。
BroadcastReceiver的具体用法将会在下一节介绍,这里我们先来了解一下广播的类型。 Android中的广播主要可以分为两种类型:标准广播和有序广播。
标准广播(normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的 BroadcastReceiver几乎会在同一时刻收到这条广播消息,因此它们之间没有任何先后顺 序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
有序广播(ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻 只会有一个BroadcastReceiver能够收到这条广播消息,当这个BroadcastReceiver中的 逻辑执行完毕后,广播才会继续传递。所以此时的BroadcastRecei ...
探究Fragment
FragmentFragment是什么Fragment是一种可以嵌入在Activity中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。
Fragment的使用方式首先创建一个平板模拟器,接着新建一个FragmentTest项目
Fragment的简单使用方法先写一个最简单的Fragment实例来练练手。在一个Activity当中添加两个Fragment,并让这两个Fragment平分Activity的空间
新建一个左侧Fragment的布局left_fragment.xml,代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> < ...
UI开发的点点滴滴
UI开发常用控件的使用方法TextView下面我们就来看一看TextView的更多用法,将activity_main.xml的代码改成如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text ...
Activity
ActivityActivity是什么Activity是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交 互。一个应用程序中可以包含零个或多个Activity,但不包含任何Activity的应用程序很少见, 谁也不想让自己的应用永远无法被用户看到吧
Activity的基本使用方法到现在为止,你还没有手动创建过Activity呢,因为第1章中的MainActivity是Android Studio 自动帮我们创建的。手动创建Activity可以加深我们的理解,因此现在是时候自己动手了。选择“Add No Activity”
手动创建Activity现在右击com.example.activitytest包→New→Activity→Empty Activity,会弹出一个创建 Activity的对话框,我们将Activity命名为FirstActivity,并且不要勾选Generate Layout File 和Launcher Activity这两个选项
勾选Generate Layout File表示会自动为FirstActivity创建一个对应的布局文件, ...