一、标准函数和静态方法1.1 标准函数with、run和apply1.1.1 with函数with函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:
1234val result = with(obj){ // obj的上下文 "value" //with 函数的返回值}
具体怎么使用呢?举个栗子🌰:我们有个fruit列表,现在我们需要吃完所有水果,并将结果打印出来。我们可以这样写:
123456789val listFruit = listOf("Apple", "Banana", "Orange", "Pear", "Grape")val builder = StringBuilder()builder.append("Start eating f ...
如果你在玩手机的时候不能上网,那你一定会感到特别地枯燥乏味。没错,现在早已不是玩单机的时代了,无论是PC、手机、平板,还是电视,都具备上网的功能, 21世纪的确是互联网的时代。
当然,Android手机肯定也是可以上网的。作为开发者,我们就需要考虑如何利用网络编写出更加出色的应用程序,像QQ、微博、微信等常见的应用都会大量使用网络技术。本章主要讲述如何在手机端使用HTTP和服务器进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常使用到的网络技术,下面就让我们一起来学习一下吧。
一、WebView的用法有时候我们可能会碰到一些比较特殊的需求,比如说在应用程序里展示一些网页。相信每个人都知道,加载和显示网页通常是浏览器的任务,但是需求里又明确指出,不允许打开系统浏览器,我们当然不可能自己去编写一个浏览器出来,这时应该怎么办呢?不用担心,Android早就考虑到了这种需求,并提供了一个WebView控件,借助它我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页。WebView的用法也相当简单。新建一个WebViewTest项目,然后修改activ ...
一、什么是Material DesignMaterial Design是由Google的设计工程师们基于传统优秀的设计原则,结合丰富的创意和科学技术所开发的一套全新的界面设计语言,包含了视觉、运动、互动效果等特性。
不过,在重磅推出之后,Material Design的普及程度却不是特别理想。因为这只是一个推荐的设计规范,主要是面向UI设计人员的,而不是面向开发者的。很多开发者可能根本就搞不清楚什么样的界面和效果才叫Material Design,就算搞清楚了,实现起来也会很费劲,因为不少Material Design的效果是很难实现的,而Android中几乎没有提供相应的API支持,基本需要靠开发者自己从零写起。
Google当然意识到了这个问题,于是在2015年的Google I/O大会上推出了一个DesignSupport库,这个库将Material Design中最具代表性的一些控件和效果进行了封装,使得开发者即使在不了解Material Design的情况下,也能非常轻松地将自己的应用Material化。后来Design Support库又改名成了Material库 ...
一、全局获取Context的技巧在Android开发过程中很多地方都需要用到Context,弹出Toast的时候需要,启动Activity的时候需要,发送广播的时候需要,操作数据库的时候需要,使用通知的时候需要……
当应用程序的架构逐渐开始复杂起来的时候,很多逻辑代码将脱离Activity类,但此时我们又恰恰需要使用Context,这个时候就会感到有些伤脑筋了。
Android提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的Application类,以便于管理程序内一些全局的状态信息,比如全局Context。
定制一个自己的Application其实并不复杂,首先需要创建一个MyApplication类继承自Application,代码如下所示:
12345678910class MyApplication : Application() { companion object { lateinit var context: Context } overrid ...
长久以来,Android官方并没有制定一个项目架构的规范,只要能够实现功能,代码怎么编写都是你的自由。但是不同的人技术水平不同,最终编写出来的代码质量是千差万别的。
由于Android官方没有制定规范,为了追求更高的代码质量,慢慢就有第三方的社区和开发者将一些更加高级的项目架构引入到了Android平台上,如MVP、MVVM等。使用这些架构开发出来的应用程序,在代码质量、可读性、易维护性等方面都有着更加出色的表现,于是这些架构渐渐成为了主流。
后来Google或许意识到了这个情况,终于在2017年,推出了一个官方的架构组件库——Architecture Components,旨在帮助开发者编写出更加符合高质量代码规范、更具有架构设计的应用程序。2018年,Google又推出了一个全新的开发组件工具集Jetpack,并将Architecture Components作为Jetpack的一部分纳入其中。当然,Jetpack并没有就此定版,2019年又有许多新的组件被加入Jetpack当中,未来的Jetpack还会不断地继续扩充。
一、Jetpack简介Jetpack是一个开发组件工具集,它 ...
一、什么是ServiceService是Android中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互而且还要求长期运行的任务。Service的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,Service仍然能够保持正常运行。不过需要注意的是,**Service并不是运行在一个独立的进程当中的,而是依赖于创建Service时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行。**
另外,也不要被Service的后台概念所迷惑,实际上Service并不会自动开启线程,所有的代码都是默认运行在主线程当中的。也就是说,我们需要在Service的内部手动创建子线程,并在这里执行具体的任务,否则就有可能出现主线程被阻塞的情况。
二、Android多线程编程当我们需要执行一些耗时操作,比如发起一条网络请求时,考虑到网速等其他原因,服务器未必能够立刻响应我们的请求,如果不将这类操作放在子线程里运行,就会导致主线程被阻塞,从而影响用户对软件的正常使用。
2.1 多线程的基本用法Android多线程编程其实并不 ...
一、使用通知通知(notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。Android的通知功能自推出以来就大获成功,连iOS系统也在5.0版本之后加入了类似的功能。
1.1 创建通知渠道Android 8.0系统引入了通知渠道这个概念。什么是通知渠道呢?顾名思义,就是每条通知都要属于一个对应的渠道。每个应用程序都可以自由地创建当前应用拥有哪些通知渠道,但是这些通知渠道的控制权是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃、是否振动或者是否要关闭这个渠道的通知。
拥有了这些控制权之后,用户就再也不用害怕那些垃圾通知的打扰了,因为用户可以自主地选择关心哪些通知、不关心哪些通知。
而我们的应用程序如果想要发出通知,也必须创建自己的通知渠道才行,下面我们就来学习一下创建通知渠道的详细步骤。
首先需要一个NotificationManager对通知进行管理,可以通过调用 ...
一、ContentProvider简介ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。目前,使用ContentProvider是Android实现跨程序共享数据的标准方式。
不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式,ContentProvider可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的风险。
在正式开始学习ContentProvider之前,我们需要先掌握另外一个非常重要的知识——Android运行时权限,以后我们的开发过程中会经常使用运行时权限,因此必须能够牢牢掌握它才行。
二、运行时权限Android开发团队在Android 6.0系统中引入了运行时权限这个功能,从而更好地保护了用户的安全和隐私。
2.1 Android权限机制详解当我们需要监听开机广播时,我们需要在AndroidManifest.xml文件中添加这样一句权限声明:
12345<manifest xmlns:and ...
一、广播机制简介Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序的。Android提供了一套完整的API,允许应用程序自由地发送和接收广播。发送广播可以借助之前学习过的Intent,而接收广播的方法则需要引入一个新的概念——BroadcastReceiver。
这里我们先来了解一下广播的类型,Android中的广播主要可以分为两种类型:标准广播和有序广播。
标准广播(normal broadcasts):是一种完全异步执行的广播,在广播发出之后,所有的BroadcastReceiver几乎会在同一时刻收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
有序广播(ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个BroadcastReceiver能够收到这条广播消息,当这个BroadcastReceiver中的逻辑执行完毕后,广播才会继续传递。所以此时的Broadca ...
当今是移动设备发展非常迅速的时代,不仅手机已经成为了生活必需品,而且平板也变得越来越普及。平板和手机最大的区别就在于屏幕的大小:一般手机屏幕的大小在3英寸到6英寸之间,平板屏幕的大小在7英寸到10英寸之间。屏幕大小差距过大有可能会让同样的界面在视觉效果上有较大的差异,比如一些界面在手机上看起来非常美观,但在平板上看起来可能会有控件被过分拉长、元素之间空隙过大等情况。
对于一名专业的Android开发人员而言,能够兼顾手机和平板的开发是我们尽可能要做到的事情。Android自3.0版本开始引入了Fragment的概念,它可以让界面在平板上更好地展示,下面我们就一起来学习一下。
一、Fragment是什么Fragment是一种可以嵌入在Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。虽然Fragment对你来说是个全新的概念,但我相信你学习起来应该毫不费力,因为它和Activity实在是太像了,同样都能包含布局,同样都有自己的生命周期。你甚至可以将Fragment理解成一个迷你型的Activity,虽然这个迷你型的Activity有可 ...