• 关于

    kotlin数据库

    的搜索结果

回答

Kotlin是什么当下互联网大数据云计算时代,数以百万计的应用程序在服务器、移动手机端上运行,其中的开发语言有很大一部分是用流行软件界20多年的、强大稳定的主力的编程语言Java编写。如果我们用一辆汽车来比喻编程语言的话,Java 拥有一个快速、可靠的发动机,但防抱死刹车系统,动力转向系统却不是那么地完全可控。驾驶起来得小心翼翼地检查可能出现的空指针,处理检查异常,重复生成冗长而单调的样板代码行等等。而编程语言的防危性(safety)和安全性(security)却又是至关重要的。要是有一门语言,既能继承Java的所有优点特性及其背后强大完备的生态库,又能更加简单、安全可控,那真是再好不过了。我们很高兴地看到,Kotlin就是这样一门语言。Kotlin是一门非研究性的语言,它是一门非常务实的工业级编程语言,它的使命就是帮助程序员们解决实际工程实践中的问题。使用Kotlin 让 Java程序员们的生活变得更好,Java中的那些空指针错误,浪费时间的冗长的样板代码,啰嗦的语法限制等等,在Kotlin中统统消失。Kotlin 简单务实,语法简洁而强大,安全且表达力强,极富生产力。本章我们先简单介绍Kotlin语言的发展历史和语言特性,然后简述为什么要去学习Kotlin语言。最后,简要介绍JVM语言家族。http://www.jianshu.com/p/20f8016e0545

程序员诗人 2019-12-02 00:25:39 0 浏览量 回答数 0

回答

以下是我列出的2020年Java开发者应该学习的技术: 1、DevOps (Docker and Jenkins) 过去的一年,越来越多的公司正在转型DevOps,DevOps非常庞大,需要学习很多工具和原理,但你不需要担心。有大神已经分享了DevOps路线图(https://github.com/kamranahmedse/developer-roadmap,可以按照这个路线图以自己的速度学习和掌握DevOps。 如果你是一个有经验的Java程序员,愿意学习环境管理、自动化和整体改进,你也可以成为DevOps工程师。 2、Java 9 - Java 15 相信现在很多Java开发人员主要使用的Java版本还是以Java 8为主,虽然Java 9 - Java 13已经推出了有一段时间。 但是作为Java程序员,我们可能因为某些原因没办法在线上环境真正的进行JDK的升级,但是花一些时间学习Java 9、Java 10、Java 11、Java 12和 Java 13的新特性还是有必要的。 另外,大家可以重点关注一些关键特性,如GC相关的特性、对编码风格有改变的特性等。还有就是Java的LTS版本(Java 8、Java 11)要重点学习。 还要提醒大家一点,在2020年,Oracle还会推出Java 14 和 Java 15!!!如果你在使用Java 7的话,马上就要被"套圈"了! 3、Spring Framework 5 2017年我们见证了Spring和Java生态系统的许多重大升级,Spring 5.0就是其中之一。Spring 5 的新反应式编程模型、HTTP/2 支持,以及 Spring 通过 Kotlin 对函数式编程的全面支持这些都值得我们好好了解一下。 4、Spring Security 5.0 Spring Security 5.0 提供了许多新功能,并支持 Spring Framework 5.0,总共有 400 多个增强功能和 bug 修复。在Spring Security 5.0.0之前,密码是明文保存,十分不安全。因为这一次发布的是大版本,所以我们决定使用更安全的密码存储方式。Spring Security 5.0.0的主要亮点在于它只需要最小化的JDK 8、反应式安全特性、OAuth 2.0(OIDC)和现代密码存储。 5、Spring Boot 2 Spring Boot 2.0 基于 Spring 5 Framework ,提供了 异步非阻塞 IO 的响应式 Stream 、非堵塞的函数式 Reactive Web 框架 Spring WebFlux等特性。很多使用过SpringBoot的人都知道,使用SpringBoot搭建Web应用真的是又快又好,相信Spring Boot 2会带来更多惊喜。 6、Hadoop、Spark 和 Kafka 另外在2020年Java程序员需要学习的是大数据相关的知识。特别是Apache Spark 和 Kafka两个框架。 如果你也想在2020年学习大数据,也一定绕不开Hadoop生态。 7、Elasticsearch 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。维基百科、Stack Overflow、Github 都在使用它。 Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。 8、ServiceMesh 这两年很火,火的一塌糊涂。在2019年,但凡是程序员相关的大会,如果没有讲ServiceMest的专题,那都不好意思开。 所有人都在说 ServiceMesh; 几乎没人知道怎么落地 ServiceMesh; 但是大家都觉得其他人在大力做 ServiceMesh; 所以大家都宣称自己在做 ServiceMesh; 这个号称下一代微服务架构的概念,现在对于大多数人来说根本不知道是啥。只知道很多大厂宣称自己在做,很多大牛在布道。 9、Serverless 无服务器运算(英语:Serverless computing),又被称为功能即服务(Function-as-a-Service,缩写为 FaaS),是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云平台来提供。这东西,听上去就很高大上。 2019年,和ServiceMesh一样,所有人都宣称自己在做。但是又很很多人不知道他到底是什么。 10、Kotlin 如果大家有关注Java 13的新特性的话,一定知道推出了字符串文本块的功能,这个功能其实是借鉴的Kotlin,除此之外,最近几年,Java有很多特性都在借鉴Kotlin,相比较于Java,Kotlin更加简洁,而且Kotlin编出来的代码也可以直接通过JVM运行。 Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。Kotlin的设计初衷就是用来生产高性能要求的程序的,所以运行起来和Java也是不相上下。Kotlin可以从 JetBrains InteilliJ Idea IDE这个开发工具以插件形式使用。 总结 以上,就是作者总结的建议Java程序员在2020年学习的一些技术,其中有一些是一定要学习的,还有一些是看大家的精力情况酌情考虑。

剑曼红尘 2020-04-07 20:42:52 0 浏览量 回答数 0

回答

将数据库中的数据插入我的应用程序的XML代码中如何工作? 你不知道 您不能(或至少不应)直接编辑XML文件。另一方面,您可以使用View API将视图动态添加到用户在屏幕上看到的UI。实际上,RecyclerView就是为此目的而制成的。 就像在HTML中一样,您可以使用JS和PHP来插入和更改元素的值,但是如何在android中完成呢? 只是为了澄清您的意思,JS允许您向浏览器中呈现的DOM添加元素。它不是让你编辑从服务器加载原始HTML代码。同样,您无法在Android应用程序运行时在其中编辑XML代码。而是在应用程序运行时将视图添加到视图层次结构中。 我在想我必须从数据库中获取数据,将其解析为XML,然后将其分配给我需要包含在其中的元素,对吗? 需要说明的是,在您的应用程序运行时,您根本不使用XML。相反,您可以View使用Java或Kotlin 创建对象并将其添加到视图层次结构中。您应该首先了解RecyclerView在大多数情况下哪种功能可以满足您的需求。 回答来源:Stack Overflow

montos 2020-03-26 22:42:06 0 浏览量 回答数 0

Quick BI 数据可视化分析平台

2020年入选全球Gartner ABI魔力象限,为中国首个且唯一入选BI产品

回答

我们在《深入分析Java的编译原理》中提到过,为了让Java语言具有良好的跨平台能力,Java独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码(ByteCode)。 有了字节码,无论是哪种平台(如Windows、Linux等),只要安装了虚拟机,都可以直接运行字节码。 同样,有了字节码,也解除了Java虚拟机和Java语言之间的耦合。这话可能很多人不理解,Java虚拟机不就是运行Java语言的么?这种解耦指的是什么? 其实,目前Java虚拟机已经可以支持很多除Java语言以外的语言了,如Kotlin、Groovy、JRuby、Jython、Scala等。之所以可以支持,就是因为这些语言也可以被编译成字节码。而虚拟机并不关心字节码是有哪种语言编译而来的。 经常使用IDE的开发者可能会发现,当我们在Intelij IDEA中,鼠标右键想要创建Java类的时候,IDE还会提示创建其他类型的文件,这就是IDE默认支持的一些可以运行在JVM上面的语言,没有提示的,可以通过插件来支持。 目前,可以直接在JVM上运行的语言有很多,今天介绍其中比较重要的九种。每种语言通过一段『HelloWorld』代码进行演示,看看不同语言的语法有何不同。 Kotlin Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。Kotlin的设计初衷就是用来生产高性能要求的程序的,所以运行起来和Java也是不相上下。Kotlin可以从 JetBrains InteilliJ Idea IDE这个开发工具以插件形式使用。 Hello World In Kotlin fun main(args: Array<String>) { println("Hello, world!") } Groovy Apache的Groovy是Java平台上设计的面向对象编程语言。它的语法风格与Java很像,Java程序员能够很快的熟练使用 Groovy,实际上,Groovy编译器是可以接受完全纯粹的Java语法格式的。 使用Groovy的一个重要特点就是使用类型推断,即能够让编译器能够在程序员没有明确说明的时候推断出变量的类型。Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也匹配Groovy的语法规则,尽管可能语义不同。 Hello World In Groovy static void main(String[] args) { println('Hello, world!'); } Scala Scala是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala经常被我们描述为多模式的编程语言,因为它混合了来自很多编程语言的元素的特征。但无论如何它本质上还是一个纯粹的面向对象语言。它相比传统编 程语言最大的优势就是提供了很好并行编程基础框架措施了。Scala代码能很好的被优化成字节码,运行起来和原生Java一样快。 Hello World In Scala object HelloWorld { def main(args: Array[String]) { System.out.println("Hello, world!"); } } Jruby JRuby是用来桥接Java与Ruby的,它是使用比Groovy更加简短的语法来编写代码,能够让每行代码执行更多的任务。就和Ruby一样,JRuby不仅仅只提供了高级的语法格式。它同样提供了纯粹的面向对象的实现,闭包等等,而且JRuby跟Ruby自身相比多了很多基于Java类库 可以调用,虽然Ruby也有很多类库,但是在数量以及广泛性上是无法跟Java标准类库相比的。 Hello World In Jruby puts 'Hello, world!' Jython Jython,是一个用Java语言写的Python解释器。Jython能够用Python语言来高效生成动态编译的Java字节码。 Hello World In Jython print "Hello, world!" Fantom Fantom是一种通用的面向对象编程语言,由Brian和Andy Frank创建,运行在Java Runtime Environment,JavaScript和.NET Common Language Runtime上。其主要设计目标是提供标准库API,以抽象出代码是否最终将在JRE或CLR上运行的问题。 Fantom是与Groovy以及JRuby差不多的一样面向对 象的编程语言,但是悲剧的是Fantom无法使用Java类库,而是使用它自己扩展的类库。 Hello World In Fantom class Hello { static Void main() { echo("Hello, world!") } } Clojure Clojure是Lisp编程语言在Java平台上的现代、函数式及动态方言。 与其他Lisp一样,Clojure视代码为数据且拥有一套Lisp宏系统。 虽然Clojure也能被直接编译成Java字节码,但是无法使用动态语言特性以及直 接调用Java类库。与其他的JVM脚本语言不一样,Clojure并不算是面向对象的。 Hello World In Clojure (defn -main [& args] (println "Hello, World!")) Rhino Rhino是一个完全以Java编写的JavaScript引擎,目前由Mozilla基金会所管理。 Rhino的特点是为JavaScript加了个壳,然后嵌入到Java中,这样能够让Java程序员直接使用。其中Rhino的JavaAdapters能够让JavaScript通过调用Java的类来实现特定的功能。 Hello World In Rhino print('Hello, world!') Ceylon Ceylon是一种面向对象,强烈静态类型的编程语言,强调不变性,由Red Hat创建。 Ceylon程序在Java虚拟机上运行,​​可以编译为JavaScript。 语言设计侧重于源代码可读性,可预测性,可扩展性,模块性和元编程性。 Hello World In Ceylon shared void run() { print("Hello, world!"); } 总结 好啦,以上就是目前主流的可以在JVM上面运行的9种语言。加上Java正好10种。如果你是一个Java开发,那么有必要掌握以上9中的一种,这样可以在一些有特殊需求的场景中有更多的选择。推荐在Groovy、Scala、Kotlin中选一个。

montos 2020-06-01 17:04:25 0 浏览量 回答数 0

问题

Android Studio,Kotlin:BitmapFactory.decodeStream()

LiuWH 2020-01-06 15:27:05 0 浏览量 回答数 1

回答

原版英文链接:点击这里 作者 | Md Kamaruzzaman 译者 | 无明 策划 | 小智 基础设施:条条道路通云端 对于云厂商来说,2019 年是硕果累累的一年。不仅初创公司在使用云计算,那些很注重安全的“保守派”公司(如政府机构、医疗保健机构、银行、保险公司,甚至是美国五角大楼)也在迁移到云端。这种趋势在 2020 年将会继续,大大小小的公司都将(或者至少有计划)迁移到云端。Gartner 公司最近发布了一个数字: 如果你是一个还在考虑要不要迁移到云端的决策者,不妨重新审视一下你的策略。如果你是一个独立开发者,并且还没使用过云基础设施,那么完全可以在 2020 年尝试一下。很多大型的云厂商(如亚马逊、微软、谷歌)都提供了免费的体验机会。谷歌在这方面做得特别大方,它提供了价值 300 美元的一年免费服务。 策划注:阿里、腾讯、华为等国内云厂商同样有免费云服务试用产品。 云平台:亚马逊领头,其他跟上 作为第一大云厂商,亚马逊在 2019 年可谓风生水起。凭借其丰富的产品组合,亚马逊将把它的优势延续到 2020 年。Canalys 发布的 2019 年第三季度报告指出,大型云厂商(AWS、Azure、GCP)占据 56% 的市场份额,其中 AWS 独享 32.6%。 其他云厂商也在努力缩短与 AWS 之间的差距。微软把主要目标转向了大型企业。最近,微软打败了亚马逊,从美国五角大楼拿到了一个 100 亿美元的大单子。这个单子将提升 Azure 的声誉,同时削弱 AWS 的士气。 谷歌一直在推动 CNCF,实现云计算运维的标准化。谷歌的长期目标是让云迁移变得更容易,方便企业从 AWS 迁移到 GCP。IBM 之前斥资 360 亿美元收购了 RedHat,也想要在云计算市场占有一席之地。 在亚太地区,阿里云市场规模超过了 AWS、Azure 的总和,全球排名第三。中国国内腾讯云等企业的增长势头也十分迅猛。 2020 年将出现更多的并购。当然,很多初创公司将会带来新的想法和创新,例如多云服务。因为竞争激烈,这些公司只能从降价和推出更多的创新产品来获取利润。 容器化:Kubernetes 将会更酷 在容器编排领域,虽然一度出现了“三足鼎立”(Kubernetes、Docker Swarm 和 Mesos),但 Kubernetes 最终脱颖而出,成为绝对的赢家。云是一个分布式系统,而 Kubernetes 是它的 OS(分布式的 Linux)。2019 年北美 KubeCon+CloudNativeCon 大会的参会者达到了 12000 名,比 2018 年增长了 50%。以下是过去 4 年参会人数的增长情况。 在 2020 年,Kubernetes 不仅不会后退,只会变得越来越强,你完全可以把赌注压在 Kubernetes 身上。另外值得一提的是,Migrantis 最近收购了 Docker Enterprise,不过收购数额不详。 几年前,人们张口闭口说的都是 Docker,而现在换成了 Kubernetes。Docker 在它的全盛时期未能盈利,反而在优势渐退几年之后才尝试变现。这再次说明,在现代技术世界,时机就是一切。 软件架构:微服务将成为主流 谷歌趋势表明,微服务架构范式在 2019 年持续增长了一整年。 随着软件行业整体逐步迁移到云端,微服务也将成为占主导地位的架构范式。微服务架构崛起的一个主要原因是它与云原生完美契合,可以实现快速的软件开发。我在之前的一篇博文中解释了微服务架构的基本原则及其优势和劣势。 https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd 我假设现在也存在一种回归到单体架构的趋势,因为在很多情况下,微服务架构有点过头了,而且做好微服务架构设计其实很难。微服务架构有哪些好的实践?在之前的另一篇博文中,我也给出了一些大概,希望对读者有用。 https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2 编程语言(整体):Python 将吞噬世界 机器学习、数据分析、数据处理、Web 开发、企业软件开发,甚至是拼接黑洞照片,Python 的影子无处不在。 在著名的编程语言排行榜网站 TIOBE 上,Python 位居最流行编程语言第三位,仅次于 Java 和 C 语言。 更有意思的是,在 2019 年,Python 的流行度翻了一番(从 5% 到 10%)。 Python 的崛起将在 2020 年延续,并缩短与 Java 和 C 语言之间的差距。另一门无所不在的编程语言 JavaScript 正面临下行的风险。为什么 Python 的势头会如此强劲?因为它的入手门槛低,有一个优秀的社区在支持,并受到数据科学家和新生代开发者的喜爱。 编程语言(企业方面):Java 将占主导 之前的 TIOBE 网站截图显示,Java 仍然是一门占主导地位的编程语言,并将在 2020 年继续保持这种地位。JVM 是 Java 的基石,其他编程语言(如 Kotlin、Scala、Clojure、Groovy)也将 JVM 作为运行时。最近,Oracle 修改了 JVM 的许可协议。 新的许可协议意味着使用 Java、Kotlin、Scala 或其他 JVM 编程语言的公司需要向 Oracle 支付大额费用。所幸的是,OpenJDK 让 JVM 继续免费。另外,还有其他一些公司为 JVM 提供企业支持。 因为体积和速度方面的问题,基于 JVM 的编程语言并不适合用在今天的无服务器环境中。Oracle 正在推动 GraalVM 计划,旨在让 Java 变得更加敏捷和快速,让它更适合用在无服务器环境中。因为除了 Java,没有其他编程语言可以提供企业级的稳定性和可靠性,所以 Java 将在 2020 年继续占主导地位。 企业版 Java:Spring 继续发力 曾几何时,在企业开发领域,Spring 和 JavaEE 之间存在着白热化的竞争。但因为 Oracle 在 JavaEE 方面没有作为,在竞争中惨败,这导致了“MicroProfile”计划的形成,并最终促成了 JakartaEE。 虽然所有的政策和活动都是围绕 JavaEE 展开,但 Spring 事实上已经赢得了这场企业 JVM 之争。2020 年,Spring 将成为 JVM 生态系统的头牌。 有两个正在进展中的项目,它们旨在减小 Java 的体积,让它更适合用在无服务器环境中。 其中一个是 Micronaut(https://micronaut.io/)。 另一个是 Quarkus(https://quarkus.io/)。 这两个项目都使用了 GraalVM,它们在 2020 年将会得到 Java 社区更多的关注。 编程语言:后起之秀的突破 2000 年代,编程语言的发展出现了停滞。大多数人认为没有必要再去开发新的编程语言,Java、C 语言、C++、JavaScript 和 Python 已经可以满足所有的需求。但是,谷歌的 Go 语言为新编程语言大门打开了一扇大门。在过去十年出现了很多有趣的编程语言,比如 Rust、Swift、Kotlin、TypeScript。导致这种情况的一个主要原因是已有的编程语言无法充分利用硬件优势(例如多核、更快的网络、云)。另一个原因是现代编程语言更加关注开发者经济,即实现更快速更容易的开发。在 Stackoverflow 提供的一份开发者报告中,排名靠前的现代编程语言如下所示(Rust 连续 4 年名列第一)。 在之前的一篇博文中,我深入探讨了现代编程语言,对比 Rust 和 Go 语言,并说明了为什么现在是采用这些语言的好时机。 https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842 最近,微软宣布他们在探索使用 Rust 来开发更安全的软件。 亚马逊最近也宣布要赞助 Rust。 谷歌宣布将 Kotlin 作为 Android 官方开发语言,所以,在 JVM 领域,Kotlin 成了 Java 的主要竞争对手。 Angular 使用 TypeScript 代替 JavaScript,将其作为主要的编程语言,其他 JavaScript 框架(如 React 和 Vue)也开始为 TypeScript 提供更多的支持。 这种趋势将在 2020 年延续下去,很多巨头公司将会深入了解新一代编程语言(如 Rust、Swift、TypeScript、Kotlin),它们会站出来公开表示支持。 Web:JavaScript 继续占主导地位 曾几何时,JavaScript 并不被认为是一门强大的编程语言。在当时,前端内容主要通过后端框架在服务器端进行渲染。2014 年,AngularJS 的出现改变了这种局面。从那个时候开始,更多的 JavaScript 框架开始涌现(Angular 2+、React、Vue、Meteor),JavaScript 已然成为主流的 Web 开发语言。随着 JavaScript 框架不断创新以及微服务架构的崛起,JavaScript 框架在 2020 年将继续主导前端开发。 JavaScript 框架:React 闪耀 虽然 React 是在 AngularJS 之后出现的,但在过去十年对 Web 开发产生了巨大的影响,这也让 Facebook 在与 Google+ 的竞争中打了一场胜战。React 为前端开发带来了一些新的想法,比如事件溯源、虚拟 DOM、单向数据绑定、基于组件的开发,等等。它对开发者社区产生了重大影响,以至于谷歌放弃了 AngularJS,并借鉴 React 的想法推出了彻底重写的 Angular 2+。React 是目前为止最为流行的 JavaScript 框架,下图显示了相关的 NPM 下载统计信息。 为了获得更好的并发和用户体验,Facebook 宣布完全重写 React 的核心算法,推出了 React-Fiber 项目。 2020 年,React 仍然是你开发新项目的首选 Web 框架。其他框架(如 Angular/Angular 2+ 或 Vue)呢?Angular 仍然是一个不错的 Web 开发框架,特别适合企业开发。我敢肯定谷歌在未来几年会在 Angular 上加大投入。Vue 是另一个非常流行的 Web 框架,由中国的巨头公司阿里巴巴提供支持。如果你已经在使用 Angular 或 Vue,就没必要再迁移到 React 了。 App 开发:原生应用 在移动 App 开发方面,有关混合应用开发的炒作有所消停。混合开发提供了更快的开发速度,因为只需要一个开发团队,而不是多个。但原生应用提供了更好的用户体验和性能。另外,混合应用需要经过调整才能使用一些高级特性。对于企业来说,原生应用仍然是首选的解决方案,这种趋势将在 2020 年延续。Airbnb 在一篇博文中非常详细地说明了为什么他们要放弃混合应用开发平台 React Native。 https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a 尽管 Facebook 尝试改进 React Native,谷歌也非常努力地推动混合 App 开发平台 Flutter,但它们仍然只适合用于原型、POC、MVP 或轻量级应用的开发。所以,原生应用在 2020 年仍将继续占主导地位。 在原生应用开发方面,谷歌和苹果分别将 Kotlin 和 Swift 作为各自平台主要的编程语言。谷歌最近再次重申了对 Kotlin 的支持,这对于 Kotlin 用户来说无疑是个好消息。 混合应用开发:React Native 在很多情况下,混合应用是个不错的选择。在这方面也有很多选择:Xamarin、Inoic、React Native 和 Flutter。Facebook 基于成熟的 React 框架推出了 React Native。就像 React 在 Web 框架领域占据主导地位一样,React Native 在混合应用领域也占据着主导地位,如下图所示。 React Native 和 React 有共同的基因,都提供了高度的代码重用性以及“一次开发,到处运行”的能力。React Native 的另一个优势是 Facebook 本身也用它来开发移动应用。谷歌在这个领域起步较晚,但在去年,谷歌的混合应用开发框架 Flutter 获得了不少关注。Flutter 提供了更好的性能,但需要使用另一门不是那么流行的编程语言 Dart。React Native 在 2020 年将继续占主导地位。 API:REST 将占主导地位 REST 是 API 领域事实上的标准,被广泛用在基于 API 的服务间通信上。当然,除了 REST,我们还有其他选择,比如来自谷歌的 gRPC 和来自 Facebook 的 GraphQL。 它们提供了不同的能力。谷歌开发的 gRPC 作为远程过程调用(如 SOAP)的化身,使用 Protobuf 代替 JSON 作为消息格式。Facebook 开发的 GraphQL 作为一个集成层,避免频繁的 REST 调用。gRPC 和 GraphQL 都在各自的领域取得了成功。2020 年,REST 仍然是占主导地位的 API 技术,而 GraphQL 和 gRPC 将作为补充技术。 人工智能:Tensorflow 2.0 将占主导地位 谷歌和 Facebook 也是深度学习 / 神经网络领域的主要玩家。谷歌基于深度学习框架 Theano 推出了 TensorFlow,它很快就成为深度学习 / 神经网络的主要开发库。谷歌还推出了特别设计的 GPU(TPU)来加速 TensorFlow 的计算。 Facebook 在深度学习领域也不甘落后,他们拥有世界上最大的图像和视频数据集合。Facebook 基于另一个深度学习库 Torch 推出了深度学习库 PyTorch。TensorFlow 和 PyTorch 之间有一些区别,前者使用的是静态图进行计算,而 PyTorch 使用的是动态图。使用动态图的好处是可以在运行时纠正自己。另外,PyTorch 对 Python 支持更好,而 Python 是数据科学领域的一门主要编程语言。 随着 PyTorch 变得越来越流行,谷歌也赶紧在 2019 年 10 月推出了 TensorFlow 2.0,也使用了动态图,对 Python 的支持也更好。 2020 年,TensorFlow 2.0 和 PyTorch 将齐头并进。考虑到 TensorFlow 拥有更大的社区,我估计 TensorFlow 2.0 将成为占主导地位的深度学习库。 数据库:SQL是王者,分布式SQL是王后 在炒作 NoSQL 的日子里,人们嘲笑 SQL,还指出了 SQL 的种种不足。有很多文章说 NoSQL 有多么的好,并将要取代 SQL。但等到炒作的潮水褪去,人们很快就意识到,我们的世界不能没有 SQL。以下是最流行的数据库的排名。 可以看到,SQL 数据库占据了前四名。SQL 之所以占主导地位,是因为它提供了 ACID 事务保证,而 ACID 是业务系统最潜在的需求。NoSQL 数据库提供了横向伸缩能力,但代价是不提供 ACID 保证。 互联网公司一直在寻找“大师级数据库”,也就是既能提供 ACID 保证又能像 NoSQL 那样可横向伸缩的数据库。目前有两个解决方案可以部分满足对“大师级数据库”的要求,一个是亚马逊的 Aurora,一个是谷歌的 Spanner。Aurora 提供了几乎所有的 SQL 功能,但不支持横向写伸缩,而 Spanner 提供了横向写伸缩能力,但对 SQL 支持得不好。 2020 年,但愿这两个数据库能够越走越近,或者有人会带来一个“分布式 SQL”数据库。如果真有人做到了,那一定要给他颁发图灵奖。 数据湖:MinIO 将要崛起 现代数据平台非常的复杂。企业一般都会有支持 ACID 事务的 OLTP 数据库(SQL),也会有用于数据分析的 OLAP 数据库(NoSQL)。除此之外,它们还有其他各种数据存储系统,比如用于搜索的 Solr、ElasticSearch,用于计算的 Spark。企业基于数据库构建自己的数据平台,将 OLTP 数据库的数据拷贝到数据湖中。各种类型的数据应用程序(比如 OLAP、搜索)将数据湖作为它们的事实来源。 HDFS 原本是事实上的数据湖,直到亚马逊推出了对象存储 S3。S3 可伸缩,价格便宜,很快就成为很多公司事实上的数据湖。使用 S3 唯一的问题是数据平台被紧紧地绑定在亚马逊的 AWS 云平台上。虽然微软 Azure 推出了 Blob Storage,谷歌也有类似的对象存储,但都不是 S3 的对手。 对于很多公司来说,MinIO 或许是它们的救星。MinIO 是一个开源的对象存储,与 S3 兼容,提供了企业级的支持,并专门为云原生环境而构建,提供了与云无关的数据湖。 微软在 Azure Marketplace 是这么描述 MinIO 的:“为 Azure Blog Storage 服务提供与亚马逊 S3 API 兼容的数据访问”。如果谷歌 GCP 和其他云厂商也提供 MinIO,那么我们将会向多云迈出一大步。 大数据批处理:Spark 将继续闪耀 现如今,企业通常需要基于大规模数据执行计算,所以需要分布式的批处理作业。Hadoop 的 Map-Reduce 是第一个分布式批处理平台,后来 Spark 取代了 Hadoop 的地位,成为真正的批处理之王。Spark 是怎样提供了比 Hadoop 更好的性能的?我之前写了另一篇文章,对现代数据平台进行了深入分析。 https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0 Spark 解决了 Hadoop Map-Reduce 的痛点,它将所有东西放在内存中,而不是在完成每一个昂贵的操作之后把数据保存在存储系统中。尽管 Spark 重度使用 CPU 和 JVM 来执行批处理作业,但这并不妨碍它成为 2020 年批处理框架之王。我希望有人能够使用 Rust 开发出一个更加高效的批处理框架,取代 Spark,并为企业省下大量的云资源费用。 大数据流式处理:Flink 是未来 几年前,实现实时的流式处理几乎是不可能的事情。一些微批次处理框架(比如 Spark Streaming)可以提供“几近”实时的流式处理能力。不过,Flink 改变了这一状况,它提供了实时的流式处理能力。 2019 年之前,Flink 未能得到足够的关注,因为它无法撼动 Spark。直到 2019 年 1 月份,中国巨头公司阿里巴巴收购了 Data Artisan(Flink 背后的公司)。 在 2020 年,企业如果想要进行实时流式处理,Flink 应该是不二之选。不过,跟 Spark 一样,Flink 同样重度依赖 CPU 和 JVM,并且需要使用大量的云资源。 字节码:WebAssembly将被广泛采用 我从 JavaScript 作者 Brandon Eich 的一次访谈中知道了 WebAssembly 这个东西。现代 JavaScript(ES5 之后的版本)是一门优秀的编程语言,但与其他编程语言一样,都有自己的局限性。最大的局限性是 JavaScript 引擎在执行 JavaScript 时需要读取、解析和处理“抽象语法树”。另一个问题是 JavaScript 的单线程模型无法充分利用现代硬件(如多核 CPU 或 GPU)。正因为这些原因,很多计算密集型的应用程序(如游戏、3D 图像)无法运行在浏览器中。 一些公司(由 Mozilla 带领)开发了 WebAssembly,一种底层字节码格式,让任何一门编程语言都可以在浏览器中运行。目前发布的 WebAssembly 版本可以支持 C++、Rust 等。 WebAssembly 让计算密集型应用程序(比如游戏和 AutoCAD)可以在浏览器中运行。不过,WebAssembly 的目标不仅限于此,它还要让应用程序可以在浏览器之外运行。WebAssembly 可以被用在以下这些“浏览器外”的场景中。 移动设备上的混合原生应用。没有冷启动问题的无服务器计算。在服务器端执行不受信任的代码。 我预测,2020 年将是 WebAssembly 取得突破的一年,很多巨头公司(包括云厂商)和社区将会拥抱 WebAssembly。 代码:低代码 / 无代码将更进一步 快速的数字化和工业 4.0 革命意味着软件开发者的供需缺口巨大。由于缺乏开发人员,很多企业无法实现它们的想法。为了降低进入软件开发的门槛,可以尝试无代码(No Code)或低代码(Low Code)软件开发,也就是所谓的 LCNC(Low-Code No-Code)。它已经在 2019 年取得了一些成功。 LCNC 的目标是让没有编程经验的人也能开发软件,只要他们想要实现自己的想法。 虽然我对在正式环境中使用 LCNC 框架仍然心存疑虑,但它为其他公司奠定了良好的基础,像亚马逊和谷歌这样的公司可以基于这个基础构建出有用的产品,就像 AWS Lambda 的蓬勃发展是以谷歌 App Engine 为基础。 2020 年,LCNC 将会获得更多关注。

茶什i 2019-12-26 11:57:03 0 浏览量 回答数 0

回答

根据表格观察:从2018年到2019年,除Python外,所有语言的流行度都有所下降。 蟒蛇 自从最近五年以来,Python是唯一不断增长的语言。它是一种通用语言,因此有人希望在2020年仅学习一种编程,并且想要涵盖更多的软件开发领域,因此可以选择Python 。 爪哇 Java在上升,但在2019年下降,这是Kotlin在Android平台上获得普及的原因。Java是一种编程语言的不错选择,但现在它在Oracle的管理之下,而Google正在推广Kotlin,因此它处于冲突地区。实际上,由于其开发人员基础,框架和旧版应用程序,该公司中有大量公司正在使用Java并将继续使用Java。 C / C ++ C和C ++仍然保持着约20%的份额,由于其固有的功能和遗留系统,它将继续存在。 JAVASCRIPT JavaScript的流行可以归因于流行的JavaScript库和诸如node.js等框架的增长。JS是动态网站的语言,由于其积极的开发,Mozilla的支持以及对HTML的惩罚,这种语言将在未来几年成为热门。库和框架。因此,如果有人想进行Web开发,则必须使用javascript。 [R 近年来,R越来越流行,其原因可能是数据分析的增长和普及。它被数据科学家使用,但与已被确立为通用语言并拥有许多数据科学库和模块的活跃开发人员的Python相比,它仍然落后很多。因此,如果只需要选择一个,则可以选择Python而不是R。 红宝石 像PHP一样,Ruby也要面对来自JavaScript甚至Python的激烈竞争,以建立后端Web开发编程语言。因此,对于Web开发而言,再次使用javascript和Python(服务器端(Flask,Django等)将是一个不错的选择,并且将提供比Ruby更多的域灵活性。 PHP 2019年PHP的普及率急剧下降,这可以追溯到服务器端对javascript和Python的接受。因此,如果有人想进行服务器端Web开发,那么PHP还是拥有大量流行框架(如CakePHP,Codeigniter等)的不错选择,否则选择通用编程语言会更好。 C 在苹果转向Swift语言之前,Objective-C是苹果软件(例如macOS,iOS等)的主要语言。因此,这种过渡反映在两种语言的流行中,即,Objective-C的流行性下降,而Swift的流行性正在上升。因此,如果有人想成为Apple产品的开发人员,那么Swift应该是首选语言。 就业市场和薪金: 薪金取决于产品的地理区域和需求,基于编程语言的薪金比较只是预测或估计薪金趋势的工具。我们根据流行调查的编程语言总结了薪水,即Dice薪水调查2018和Stack-overflow调查2018和2019。 从上表中可以很明显地看出,Go / Golang是市场上薪水很高的工作,甚至在2019年堆栈溢出调查和Dice Salary Survey 2018中在高薪工作中排名第一。

珍宝珠 2019-12-24 17:37:09 0 浏览量 回答数 0

问题

GitHub年度报告:python超越java c#上升中国开发者排名第二

珍宝珠 2020-02-12 10:01:38 619 浏览量 回答数 1

问题

如何解决问题SQLiteException:没有这样的表:Cars(代码1 SQLITE_ERROR

LiuWH 2020-01-17 08:53:45 0 浏览量 回答数 1

回答

一、前言 Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,那它是否还能在未来保持领先的优势呢?本文就主要从Java语言所不擅长的领域,以及它在自己的领土内受到的对手入手,聊一聊Java语言在未来所面临的挑战。 二、Java帝国的今天 2.1 依然霸占TIOBE热门编程语言的榜首 这是来自权威开发语言排行榜TIOBE的最新数据(截止到2020年4月),可以看到Java语言依然在语言排行榜霸占第一的位置!虽然下面Python小老弟近几年搭上大数据的热潮,发展实为迅猛,在其他一些排行榜上面甚至超越大哥,但是在TIOBE这样权威的排行榜上面,Python依旧是小老弟! 2.2 曾经想扼杀Java的微软宣布加入OpenJDK 这又是一个IT界的真香现场,Sun 公司曾以“歧视使用 Java 软件”为由起诉微软。而微软在2001年推出新版操作系统 Windows XP 时,故意不安装 Java 软件,并且推出高仿 Java 的语言 C# 和 .net 框架。在现在,微软却宣布加入OpenJDK,拥抱Java技术。微软的宇宙第一 IDE Visual Studio也开始支持Java开发(通过VS的 Visual Studio Live Share ,可以关联到VS code上面的Java项目,协同编程,间接地支持了Java开发)。 2.3 Oracle发布开源全栈虚拟机GraalVM 这是大名鼎鼎的Oracle公司搞出来的开源产品,从官网“Run Programs Faster Anywhere”这句口号和产品的命名GraalVM就可以看出,GraalVM是升级版的JVM。在GraalVM上面执行Java程序的效率更高(得益于其中的JIT编译器技术)。最牛逼的地方在于,GraalVM支持多语言应用!在GraalVM里面,多种不同的语言可以互相传递数据,支持Java、Python、Ruby、R、Scala、Kotlin,JavaScript等多种语言。 三、Java帝国受到的挑战 3.1 后端服务器开发 J2EE作为Java平台的重要组成部分,现在广泛应用于Web后台服务器开发领域,在这个领域,Java拥有很多好朋友,比如Spring框架,Mybatis和Hibernate等,使得开发者可以快速构建Web应用程序。这是Java帝国一块重要的领土,但也有很多挑战。下面就是几个强大的竞争者。 3.1.1 Python 的竞争 Python语言和Java相比,具有下面这些优点: 语法简单直观,这意味着开发速度快第三方库强大,可以写复杂的逻辑 当然Python和Java相比执行效率上肯定是更低了,因此主要应用于小型的网站后台,像阿里这样的大厂就是拥抱Java后台的了。 3.1.2 C++ 的竞争 C++语言和Java相比,具有以下优点: 执行效率高对内存管理自由,而Java由GC来管理 C++适合大型高性能的服务器开发。腾讯更多的就是使用C++进行开发,这点和阿里不同。当然C++相比Java,学习和开发的难度更高。 3.1.3 node.js 的竞争 node.js的出现大概是前端程序员最高兴的事情了,因为node.js可以让他们写的JavaScript代码运行在服务端,这样就可以使得前端不用学Java也能自己写后台,摆脱后台爸爸的束缚(误)。得益于node.js的事件驱动机制,node.js具有很高的并发性能,可以应对大规模的http请求。但也有缺点,因为js只支持单核,因此没法充分利用服务器的性能,它不适合CPU密集型应用。 3.1.4 Go 的竞争 Go语言是最近很火的开发语言,适合用于开发高性能分布式系统。这是一个十分强大的竞争对手,被认为是未来的服务端语言。它具有下面这些优点: 学习难度低,容易上手,易于维护得益于协程,并发性能优越编译型语言,执行效率高 3.1.5 小结 可以看到,在后端服务器开发领域,Java在不同方面受到多种语言的竞争,轻量小型的服务器,人们可以选择Python,node.js或者PHP。而大型高性能服务器,人们可以选择C++。Go语言就更强大,兼具了比Java更简单的语法和更高的并发性能,背后又是Google爸爸。因此,在这一领域,Java面临巨大的竞争压力。 3.2 安卓系统应用开发 Java用于安卓应用程序开发已经是很成熟的方案了,目前绝大多数的安卓应用都是用Java写的。很多安卓程序员也都是学Java过来的。但是随着新语言不断推出,和安卓应用开发方式的演变,Java慢慢不再是安卓开发的首选。比如下面这些语言,就是比较热门的选择。 3.2.1 Kotlin 成为 Android 开发的首选语言 在2019年的Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。Kotlin 可以编译成Java字节码,可以在JVM上面运行,也可以编译成JavaScript,在没有JVM的机器上运行。Kotlin语言比Java更安全,更简洁,随着谷歌爸爸推崇,将来的发展前景可期。 3.2.2 Flutter 框架和 Dart 语言 这两个都是谷歌最近推出的东西,Flutter是一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架,Dart是由Google开发的一门全新的计算机编程语言,而Flutter使用Dart语言开发。Fuchsia是谷歌开发的一款全新的操作系统,Flutter 是 Fuchsia 的开发框架。Flutter编写的代码可以同时生成IOS和Android两个平台下的应用程序,因此Flutter框架逐渐热门。 3.2.3 大前端时代下的H5应用 随着时代发展,现在的前端不再只是写web网页,而是逐渐发展为大前端,web,Android,IOS通吃,H5应用的流行就是一个例子,大家应该都发现,手机上开始出现快应用,小程序这些使用前端语言进行开发的app,这些应用使用HTML,JS和CSS进行开发,无需使用Java。相比之下,H5应用轻量级,启动快,跨平台,用户体验方面也逐渐开始接近原生应用的流畅度。因此大有流行的趋势。 3.2.4 小结 这一小节介绍了安卓开发的现状,Java作为曾经的安卓开发第一首选语言,正在面临诸如Kotlin语言,Flutter和Dart语言等新的开发语言的挑战,同时,随着安卓应用开发逐渐出现H5应用的趋势,前端语言也逐渐开始来到Java的地盘。 四、Java不擅长的领域 4.1 前后端分离和JSP的没落 JSP是一度火爆的技术,Java曾对其寄予厚望,希望通过JSP技术占领web应用程序领域。然而,随着网页开发越来越复杂,用JSP开发网页变得很麻烦,前端和后端混杂在一起,开发效率很低。因此前后端开始分离,而JSP这种运行于服务器端的网页程序也就慢慢退出了舞台。 4.2 C#和.NET抢占桌面程序地盘 Java曾经也被广泛用于开发桌面客户端,其中Swing框架就是一个有名的GUI框架。然而,曾经想要扼杀Java的微软,开发了C#语言。C#成为Java的竞争对手,C#编写运行于Windows系统的桌面应用程序上具有优势,Java写的桌面应用,虽然可以跨平台到处运行,这对于程序员当然是好事,但是对于用户来说,在Windows上运行个Java程序还得安装JRE,显得十分麻烦。而且,Java桌面程序运行起来比C#程序慢。因此,C#和.NET逐渐占领了桌面应用程序的市场。 4.3 C/C++活跃的嵌入式系统领域 Java曾经是为了嵌入式系统开发而设计的。然而,Java程序员并不能直接操作硬件,并且,Java是相对较重的语言,对内存等硬件资源不友好,执行效率也相对较低。而在嵌入式系统中,往往只有很少的内存空间,却对运行效率有很高的要求。因此,在嵌入式领域,更多的是C语言和C++甚至是汇编语言的天下。 4.4 小结 这一小节主要针对Java所不擅长的领域来讨论。可以看到,Java最为有名的特性“Write once, run anywhere”,也成了它最大的缺陷:在执行效率上做不到卓越。因此,在桌面应用程序和嵌入式系统两个领域Java不是王者。而随着时代发展,前后端分离,JSP也被时代所抛弃。 五、总结 综上所述,相信大家对于Java语言有了更全面的了解,看到了Java背后的芸芸众生,各种层出不穷的高级语言和新技术,和Java相爱相杀。Java作为现在世界上最热门的编程语言,依然在各个不同的领域具有重要的地位 ,Java的强大之处在于,它十分全能,几乎没有什么是Java不能做的,但它并不都是做得最好的,我们也可以看到许许多多的竞争者在不同方面比Java语言更加优越。 但是,我写这篇文章的目的,不在于比较各个语言的优劣,各种语言都有自己的优点和缺点,我们也不必因为某种语言更好就着急转语言。总而言之,语言只是工具,各种语言之间,语法的差别都不是特别大,背后的原理也是大同小异,往往只是多了几个新特性,而语言背后的编程思维才是最重要的。

剑曼红尘 2020-04-09 14:29:42 0 浏览量 回答数 0

问题

错误:无法访问主线程上的数据库,因为它可能长时间锁定UI。-使用Kotlin的Android Roo

LiuWH 2020-01-06 14:25:09 0 浏览量 回答数 1

问题

微服务开发的 10 个最佳实践

游客pklijor6gytpx 2020-01-03 14:59:12 147 浏览量 回答数 1

回答

“求知若饥,虚心若愚”——这个原本出自《全球概览》的俳句,因为乔布斯在斯坦福大学毕业演讲中的引用而备受推崇,流传成为 IT 界的至理名言之一。在编程界,亦有“代码胜于雄辩”、“Done is better than perfect”等警句,寥寥数语将编程工作者的形象特质描摹到了极致。程序员,就是技术至上、唯代码是瞻且必须不断武装自己的群体。 21 世纪,高薪、高端、高技术范儿已成为程序员的固有标签,在这个新的元年,CSDN 将基于一年一度的开发者大调查数据,以全新的视角深入发掘中国开发者群体的整体现状、应用开发技术以及开发工具/平台的发展趋势,呈现更真实、更全面且更有学习价值的开发者画像。 30 岁以下开发者人数占比超八成,全国有 19.6% 开发者月薪超过 1.7 万元; 六成开发者在使用 Java 语言,近五成开发者近期最想学 Python 语言; Spark、Redis 和 Kafka 正在成为企业大数据平台通用技术组件; 区块链技术近两年是热点,比特币和以太坊是两种主流的区块链开发平台; 人工智能技术日益受到企业和市场的关注,但 64% 企业尚未实现智能化,机器学习/深度学习算法工程师最为急缺; 近七成开发者认为未来 5G 网络的传输速率能达到 4G 网络的 10 倍以上; Apache 项目和 Linux 是开发者较为喜欢的开源项目; 半数开发者很少参与开源项目的开发、维护、运营和社区发展等。 软件开发准入门槛持续降低,近 2 成开发者月薪超过 1.7 万 30 岁以下开发者人数占比超八成,软件开发从业门槛持续降低 从 2015 年到 2019 年的调研数据来看:30 岁及以下的开发者人群占比在 8 成以上,一直是软件开发领域的主力军;全国近半数的开发者工作在一线城市(北京、上海、广州、深圳、天津);物联网、软件、IT 制造三个技术领域涵盖了国内 84% 以上的开发者;本科及以上学历占 8 成;92% 的开发者是男性。 和国外开发者年龄分布趋势大概一致,国内的软件开发群体一直呈现出越来越年轻化的特点。这是因为,一方面软件开发行业蓬勃发展,各行各业都需要软件开发相关人才,也有越来越多的毕业生选择从事该行业;另一方面,是因为编程语言、框架、云服务等基础设施的持续完善,从事软件开发的门槛在持续降低,更容易接纳新鲜血液,报告统计发现,本科学历是开发者的主力军,66% 的开发者拥有本科学历,而硕士研究生、博士研究生仅占 11%、1%。 八成以上开发者月薪在 5 千~3 万元之间,19.6% 开发者月薪超过 1.7 万元 通过结合受教育程度和薪资水平的数据特点来看,学历越高的人群中,月薪 1.7 万元以上的高收入比例越高。在一线城市(北京、上海、广州、深圳、天津)中,月薪超过 1.7 万元的开发者占比为 30%,该比例远高于国内其它城市。 开发者属于相对高薪的职业,尤其是在一线城市中,但不同开发者之间收入差距较大。软件开发是一个智力密集型的工作,不同开发者能够提供的价值差别很大,这就使得一个优秀开发者的收入远高于普通开发者:硕士和博士毕业的高收入者比率要远高于本科及以下的;金融和互联网行业的高收入比率最高。 自学是开发者持续学习的主要路径 软件开发行业日新月异,只有保持持续学习才能跟上技术变化的脚步,终身学习是现代人保持竞争力甚至是维持生存的必要手段。 从调研中可以看到,53% 的开发者会通过在未参加正式课程的情况下,自学一门新语言、框架或工具。但同时,也有半数的人参加过在职培训或者线下课程,相对于自学的灵活性而言,这类培训会更为系统和完整,对于长期的个人提升有所裨益,开发者可以适当选择。但与之相悖的是,只有不到 40% 的开发者,愿意为学习付费,这可能会导致参与的课程质量不够高。 Java 雄踞语言榜,Visual Studio 受开发者欢迎 Java 长盛:使用最多,开发者最想学 从编程语言来看,Java 是最多人使用的语言,而 JavaScript 和 SQL 分别是第二第三位。这三门语言,使用场景都很广泛,Java 一方面后端开发最常使用,生态成熟度无人可比;另一方面,Java 依然是 Android 上最重要的开发语言,与之相比 ,新兴的 Kotlin 只有 2% 的开发者在使用。而 JavaScript 不仅是前端开发的必备语言,还用在 Web 开发、小程序开发等场景下。 Java 和 Python 依然是开发者最希望学习的语言之一,只是相比之下,Python 的热度有所降低,这可能和机器学习没有去年那么火热有所关联。变化比较大的是 Go 语言,与去年相比,今年的调研中想学 Go 语言的开发者降低到了 4%,与之相似,Kotlin、R 的学习意愿也大幅降低。 从这个趋势也可以看到,如今的开发者更意愿去学习一些相对成熟度、用途更为广泛的语言,对一些代表新模式的语言乐衷程度有所降低。 七成以上在使用 Windows 操作系统,83% 在使用 MySQL 数据库 72% 开发者在使用 Windows 操作系统,18% 在使用 Linux 系列操作系统。在存储服务的使用上,MySQL 继续扩大其使用率到达了 83%,几乎是开发者必备的技能。和去年相比,Elasticsearch 出现在数据库使用的调研中,在大数据时代,Elasticsearch 作为提供搜索服务的第一选型,也必然会被越来越多的开发者学习和使用 Node.js 是相对使用普遍的技术框架 在 Web 开发上,前端使用 Vue.js 后端使用 Spring 是最常见的选型方案,与之相对应,Node.js 是最多被用到的框架,这和当今多端开发的趋势密不可分。后端用微服务架构,中间用 Node.js 粘合出适合 Web、Android、iOS 等不同端和场景使用的 APIs,是当下主流的部署方案之一,既可以前后端分离提高开发效率,又可以在保障服务稳定性的同时提升灵活性。而TensorFlow 成为开发者最期望学习的框架,这说明开发者依然对机器学习保持关注和热情。 Visual Studio 是最为普遍使用的开发环境 在开发环境的选择上,Visual Studio 是最为普遍使用的开发环境,这和微软对开发者的投入密不可分。微软投入了大量的研发力量,使得 Visual Studio 可以在各种操作系统进行各种编程语言的开发,其强大且完善的插件系统可以满足开发者的各种需求,使其可以超过 IntelliJ。 大数据平台以私有云部署为主,Spark 使用率高达 44% 私有云部署解决方案是企业构建大数据平台的主要方式 随着分布式计算和云平台的逐步成熟,目前大部分公司都有能力搭建自己的大数据平台。调研数据显示,81% 企业在进行大数据相关的开发和应用,50% 的企业选择私有云解决方案来部署大数据应用,28% 的企业选择自主研发。 仅 19% 企业使用商业发行版 Hadoop 版本搭建数据平台 调查报告发现,有 30% 以上的企业并没有使用相对成熟的 Hadoop 技术搭建数据平台,这些企业的算法性能会很大程度上受限于低效的平台,更不可能开发出更高效的数据分析算法。但幸运的是大部分企业都基于商业版或者社区版 Hadoop 搭建了数据平台,这些公司的侧重点主要在应用发现和算法的设计层面,更有可能在不久的将来实现大数据的价值。 Spark 是企业大数据平台最普遍的组件 Apache Spark 是一个处理大规模数据的快速通用引擎,它可以独立运行,也可以在 Hadoop、Mesos、云端运行,它可以访问各种数据源包括 HDFS、Cassandra、HBase 和 S3,可以提升 Hadoop 集群中的应用在内存和磁盘上的运行速度。Spark 生态系统中除了核心 API 之外,还包括其他附加库,可以为大数据分析和机器学习领域提供更多的能力。本次调研中,Spark 是使用最普遍的大数据平台组件,使用率达到44%,而MapReduce使用率仅为21%。 分布式文件系统 HDFS 作为核心组件之一,使用率也达到了 39%。企业对大数据平台应用最多的场景是统计分析、报表生成及数据可视化,38% 企业使用ELK(ElasticSearch + Logstash + Kibana)实时日志分析平台。 综上所述,目前大数据的发展热潮令人欢欣鼓舞。一个优秀的大数据团队,需要有对产品开发具有高敏感性同时对技术有一定理解的人才,同时需要理论基础极其扎实,能对实际问题进行抽象建模和算法设计的人才。只有双管齐下,在产品和技术方面进行深层次探索,才能真正实现大数据产业的繁荣。 区块链质变,比特币逆袭以太坊成 TOP 1 开发平台 22% 的开发者正在用或者准备用区块链技术解决技术问题 区块链技术的发展,是一个量变到质变的过程。相比于 2018 年,对区块链和加密货币了解的人从 22% 增长到 32%,准备尝试用区块链技术解决一些问题的人数从 14% 增长到 16%,仅有 4% 的人对区块链完全不了解。 43% 的受访者在从事公有链(比特币、以太坊等)的开发 本次调研中,43% 的受访者在从事公有链(比特币、以太坊等)的开发。目前行业侧重发展的方向为解决方案、公链及联盟链,公有链由于其自带激励机制,对于普通开发者有直接的回馈,所以上面开发者占比高也比较合情理。行业解决方案从去年的 27% 增加到今年的 36%,说明传统行业开发者对区块链的认可度在增加。 区块链本质上是技术,落地场景及实际应用才是连接社会效益的关键。 比特币和以太坊是当前两种主流的区块链开发平台 在行业开发者的印象中,以太坊一直是开发平台领域的头号玩家。但今年数据显示,以太坊从 2018 年的 44% 占比第一,降到 24%;比特币从 2018 年的 28%,上升到 35%,占比第一。比特币在行业内外仍然拥有最强共识,在闪电网络的加持下,大家也似乎感受到比特币离商用也不再遥远了。 金融是普遍认为的行业应用方向 金融行业是普遍认为的行业应用方向,占 36%。区块链本身具备的防篡改、可追溯的特点,能大大降低金融行业监管成本,不过金融的进入门槛相对也较高,需要各方面技术的配合。其次,智能硬件和物联网也被认为是主流应用方向,占 14%。不过相比其他众多已经很成熟的技术,依托区块链的解决方案在实际使用中,往往面临必要性缺失的问题,因此区块链应用发展仍任重道远。 在区块链结合行业之前,更加要重视与其他新技术的结合和协同:物联网设备能够提供大量数据,5G 能够提供高速传输,存储可以解决区块存放的问题等。 算法工程师最急缺,TensorFlow 占据 AI 深度学习框架榜首 64% 的企业尚未实现智能化 在经历了 2019 年的行业低谷期之后,无论是行业巨头还是新兴独角兽,都开始审视 AI 能够切实落地的场景。调研数据显示,14% 的企业尚无信息化基础,27% 的企业实现了事务处理数字化,22% 的企业具备商业智能基础设施,实现描述性分析。使用机器学习实现预测性分析和决策优化的企业占 16%,而在业务中全面使用 机器学习/深度学习算法工程师最急缺 在岗位分布上,由于深度学习是以大数据为基础的,而感知智能中的计算机视觉又是目前深度学习较为成熟的应用,所以,机器学习和深度学习工程师,以及数据工程师、计算机视觉工程师排行在前三位。当前最急缺的岗位也是机器学习/深度学习算法工程师、数据科学家/数据分析师/数据挖掘工程师岗位。 53% 的开发者表示其团队急缺机器学习/深度学习算法工程师,37% 表示急缺数据科学家/数据分析师/数据挖掘工程师。 TensorFlow是人工智能领域主流深度学习框架 此次调研中,TensorFlow 使用普及率达到 48%。从技术本身的角度来看,较为成熟的 TensorFlow 成为 AI 工程师的首选深度学习框架,Torch/PyTorch由于其开发效率较高,也得到了较多支持。 35% 开发者选用国产 AI 芯片应用于自己的 AI 开发 在 AI 芯片领域,国内厂商也开始弯道超车,越来越多的开发者也开始关注国内 AI 芯片的进展。调查数据显示,选用国产 AI 芯片应用于自己的 AI 开发时最看重的因素方面,对主流 AI 框架的支持能力是最普遍的因素,占 35%。 物联网云平台三足鼎立:阿里物联、华为云、百度 IoT 69% 的开发者认为未来 5G 网络的传输速率能达到 4G 的 10 倍以上 每一代新型的通信系统总是能带来更大的带宽。据报告显示,近七成开发者认为未来 5G 网络的传输速率能够达到 4G 网络的 10 倍以上。 影响 5G 普及的三大因素:5G 套餐价格未定、运营商的开发程度、需要更换手机 由于目前 5G 网络使用者较少,费用较低廉的套餐还没有推出,第一代 5G 终端不太成熟等原因,目前 87% 的开发者认为 5G 套餐费用过高,并且大部分开发者认为 5G 网络目前覆盖范围有限,因此将近 40% 的开发者正处于观望阶段。 值得一提的是,本次调查中 62% 的开发者认为,5G 时代应该加强对个人隐私的保护,这反映出目前社会对数据隐私越来越重视的整体趋势。 阿里物联和华为云是应用相对普遍的 IoT 云平台 根据调查,2019 年物联网云平台呈现三足鼎立的趋势:阿里物联、华为云、百度 IoT 成为用户最多的三种物联网平台,并且和第四名中移物联远远拉开了差距,这和我们的实际使用体验一致。 未来的基础物联网平台可能会继续呈现以偏硬件实现为主的华为云和以偏软件体验为主的阿里、百度物联平台的三足鼎立局面。 物联网技术开发:Linux 和 Windows 是使用较多的操作系统 Linux 和 Windows 是较普遍的操作系统,使用率分别为 51%、44%。目前在物联网设备开发过程中,Linux、Windows 和 Android 较为普遍,依然延续了 PC 平台的开发者操作系统份额。虽然华为、阿里等公司在 2019 年均发布了自己的物联网专用操作系统,但还并未得到开发者的大规模认可,大公司的物联网操作系统发展之路依然任重而道远。 Wi-Fi 是应用最普遍的物联网通信技术 在本次调研中,近距离通信(比如 Wi-Fi 和蓝牙)是现存物联网开发者最主要的通信方式。然而这种比重可能会随着未来 3~4 年内车联网的大规模商业化产生变化,汽车、工业物联、智能电网这类高移动性、高可靠和低延迟物联网场景会更适合需要整体规划的运营商网络。 六成开源开发者无收入,Apache 项目最受喜欢 77% 开发者每周在开源上投入时间不超过 5 小时 无论是大数据、区块链、人工智能还是物联网领域,其中最为重要的、最受欢迎的技术都是开源的。但是报告统计发现,有超过一半的开发者很少参与开源项目,每周在开源上投入不超过 5 小时的占 77%,其中,1 小时以内的占 31%。此外,65% 的开发者不曾在开源上获得收入,获得不错收入的仅占一成。 开发者最喜欢的开源项目是 Apache 25% 开发者最喜欢 Apache,24% 开发者最喜欢 Linux。作为全球最大的软件基金会,开发者用过的诸多项目,例如 Dubbo、Log4j、Maven、RocketMQ 和 Tomcat 等,均孵化自 Apache。 国内开源的现状虽然近年来已经有了很大的发展,但是一个残酷的事实是,老兵正在离开这个行业,离开一线开发的队伍:报告数据显示,30 岁以下的开发者人数超过 82%,接触开源的时间在 5 年以内的开发者超过 83%。随着那些经验丰富的老兵转行或是进入管理层,不再写代码、也不再参与开源的事实也就凸显出来.....未来开源的建设,依然任重而道远。 在数据中寻找共性,《2019 - 2020 中国开发者调查报告》全面且真实地展现中国开发者及技术现状,希望对您的学习或工作有所帮助。 ———————————————— 版权声明:本文为CSDN博主「CSDN资讯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/csdnnews/article/details/104538091

问问小秘 2020-03-11 16:46:19 0 浏览量 回答数 0

回答

一 系统介绍 Android 是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。 围绕在Google的Android系统中,形成了移植开发和上层应用程序开发两个不同的开发方面。手机厂商从事移植开发工作,上层的应用程序开发可以由任何单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 作为一个手机平台,Android在技术上的优势主要有以下几点: - 全开放智能手机平台 - 多硬件平台的支持 - 使用众多的标准化技术 - 核心技术完整,统一 - 完善的SDK和文档 - 完善的辅助开发工具 Android的开发者可以在完备的开发环境中进行开发,Android的官方网站也提供了丰富的文档、资料。这样有利于Android系统的开发和运行在一个良好的生态环境中。 https://developer.android.com/about安卓开发者官方网站 从宏观的角度来看,Android是一个开放的软件系统,它包含了众多的源代码。从下至上,Android系统分成4个层次: 第1层次:Linux操作系统及驱动; 第2层次:本地代码(C/C++)框架; 第3层次:Java框架; 第4层次:Java应用程序。 Android系统的架构如图所示: 由于Android系统需要支持Java代码的运行,这部分内容是Android的运行环境(Runtime),由虚拟机和Java基本类组成。 对于Android应用程序的开发,主要关注第3层次和第4层次之间的接口。 二 学习路线 基础学习——JavaSE: 基础学习扩展——JavaEE: 基础学习扩展——Linux基础: Android开发学习——基础理论:系统架构分析: Android系统从底向上一共分了4层,每一层都把底层实现封装,并暴露调用接口给上一层。 Linux内核(Linux Kernel) Android运行在linux kernel 2.6之上,但是把linux内受GNU协议约束的部分做了取代,这样在Android的程序可以用于商业目的。 Linux 内核是硬件和软件层之间的抽象层。 中间件 中间件包括两部分: 核心库和运行时(libraries & Android runtime) 核心库包括,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕;Media Framework 媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQlite 数据库,一个功能强大的轻量级嵌入式关系数据库;WebKit 浏览器引擎等。 Dalvik虚拟机: 区别于Java虚拟机的是,每一个Android 应用程序都在它自己的进程中运行,都有一个属于自己的Dalvik 虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。 应用程序框架(Application Framework) 丰富而又可扩展性的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 可嵌入的web 浏览器。内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 三 基础知识 掌握java部分之后,可以使用开发工具进入android世界 您可以使用 Kotlin、Java 和 C++ 语言编写 Android 应用。Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。一个 APK 文件包含 Android 应用的所有内容,它也是 Android 设备用来安装应用的文件。 每个 Android 应用都处于各自的安全沙盒中,并受以下 Android 安全功能的保护: • Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户; • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统会为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件; • 每个进程都拥有自己的虚拟机 (VM),因此应用代码独立于其他应用而运行。 • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 系统会在需要执行任何应用组件时启动该进程,然后当不再需要该进程或系统必须为其他应用恢复内存时,其便会关闭该进程。 Android 系统实现了最小权限原则。换言之,默认情况下,每个应用只能访问执行其工作所需的组件,而不能访问其他组件。这样便能创建非常安全的环境,在此环境中,应用无法访问其未获得权限的系统部分。不过,应用仍可通过一些途径与其他应用共享数据以及访问系统服务: • 可以安排两个应用共享同一 Linux 用户 ID,在此情况下,二者便能访问彼此的文件。为节省系统资源,也可安排拥有相同用户 ID 的应用在同一 Linux 进程中运行,并共享同一 VM。应用还必须使用相同的证书进行签名。 • 应用可以请求访问设备数据(如用户的联系人、短信消息、可装载存储装置(SD 卡)、相机、蓝牙等)的权限。用户必须明确授予这些权限。如需了解详细信息,请参阅使用系统权限。 本文档的其余部分将介绍以下概念: • 用于定义应用的核心框架组件 • 用来声明组件和应用必需设备功能的清单文件。 • 与应用代码分离并允许应用针对各种设备配置适当优化其行为的资源。 应用组件 应用组件是 Android 应用的基本构建块。每个组件都是一个入口点,系统或用户可通过该入口点进入您的应用。有些组件会依赖于其他组件。 共有四种不同的应用组件类型: • Activity • 服务 • 广播接收器 • 内容提供程序 每种类型都有不同的用途和生命周期,后者会定义如何创建和销毁组件。以下部分将介绍应用组件的四种类型。 Activity Activity 是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。Activity 有助于完成系统和应用程序之间的以下重要交互: • 追踪用户当前关心的内容(屏幕上显示的内容),以确保系统继续运行托管 Activity 的进程。 • 了解先前使用的进程包含用户可能返回的内容(已停止的 Activity),从而更优先保留这些进程。 • 帮助应用处理终止其进程的情况,以便用户可以返回已恢复其先前状态的 Activity。 • 提供一种途径,让应用实现彼此之间的用户流,并让系统协调这些用户流。(此处最经典的示例是共享。) 您需将 Activity 作为 Activity 类的子类来实现。如需了解有关 Activity 类的更多信息,请参阅 Activity 开发者指南。 服务 服务是一个通用入口点,用于因各种原因使应用在后台保持运行状态。它是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。服务不提供界面。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。诸如 Activity 等其他组件可以启动服务,使该服务运行或绑定到该服务,以便与其进行交互。事实上,有两种截然不同的语义服务可以告知系统如何管理应用:已启动服务会告知系统使其运行至工作完毕。此类工作可以是在后台同步一些数据,或者在用户离开应用后继续播放音乐。在后台同步数据或播放音乐也代表了两种不同类型的已启动服务,而这些服务可以修改系统处理它们的方式: • 音乐播放是用户可直接感知的服务,因此,应用会向用户发送通知,表明其希望成为前台,从而告诉系统此消息;在此情况下,系统明白它应尽全力维持该服务进程运行,因为进程消失会令用户感到不快。 • 通常,用户不会意识到常规后台服务正处于运行状态,因此系统可以更自由地管理其进程。如果系统需要使用 RAM 来处理用户更迫切关注的内容,则其可能允许终止服务(然后在稍后的某个时刻重启服务)。 绑定服务之所以能运行,原因是某些其他应用(或系统)已表示希望使用该服务。从根本上讲,这是为另一个进程提供 API 的服务。因此,系统会知晓这些进程之间存在依赖关系,所以如果进程 A 绑定到进程 B 中的服务,系统便知道自己需使进程 B(及其服务)为进程 A 保持运行状态。此外,如果进程 A 是用户关心的内容,系统随即也知道将进程 B 视为用户关心的内容。由于存在灵活性(无论好坏),服务已成为非常有用的构建块,并且可实现各种高级系统概念。动态壁纸、通知侦听器、屏幕保护程序、输入方法、无障碍功能服务以及众多其他核心系统功能均可构建为在其运行时由应用实现、系统绑定的服务。 您需将服务作为 Service 的子类来实现。如需了解有关 Service 类的更多信息,请参阅服务开发者指南。 注意:如果您的应用面向 Android 5.0(API 级别 21)或更高版本,请使用 JobScheduler 类来调度操作。JobScheduler 的优势在于,它能通过优化作业调度来降低功耗,以及使用 Doze API,从而达到省电目的。如需了解有关使用此类的更多信息,请参阅 JobScheduler 参考文档。 广播接收器 借助广播接收器组件,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。由于广播接收器是另一个明确定义的应用入口,因此系统甚至可以向当前未运行的应用传递广播。例如,应用可通过调度提醒来发布通知,以告知用户即将发生的事件。而且,通过将该提醒传递给应用的广播接收器,应用在提醒响起之前即无需继续运行。 许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管广播接收器不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。但广播接收器更常见的用途只是作为通向其他组件的通道,旨在执行极少量的工作。例如,它可能会根据带 JobScheduler 的事件调度 JobService 来执行某项工作 广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。如需了解详细信息,请参阅 BroadcastReceiver 类。 内容提供程序 内容提供程序管理一组共享的应用数据,您可以将这些数据存储在文件系统、SQLite 数据库、网络中或者您的应用可访问的任何其他持久化存储位置。其他应用可通过内容提供程序查询或修改数据(如果内容提供程序允许)。例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何拥有适当权限的应用均可查询内容提供程序(如 ContactsContract.Data),以读取和写入特定人员的相关信息。我们很容易将内容提供程序看作数据库上的抽象,因为其内置的大量 API 和支持时常适用于这一情况。但从系统设计的角度看,二者的核心目的不同。对系统而言,内容提供程序是应用的入口点,用于发布由 URI 架构识别的已命名数据项。因此,应用可以决定如何将其包含的数据映射到 URI 命名空间,进而将这些 URI 分发给其他实体。反之,这些实体也可使用分发的 URI 来访问数据。在管理应用的过程中,系统可以执行以下特殊操作: • 分配 URI 无需应用保持运行状态,因此 URI 可在其所属的应用退出后继续保留。当系统必须从相应的 URI 检索应用数据时,系统只需确保所属应用仍处于运行状态。 • 这些 URI 还会提供重要的细粒度安全模型。例如,应用可将其所拥有图像的 URI 放到剪贴板上,但将其内容提供程序锁定,以便其他应用程序无法随意访问它。当第二个应用尝试访问剪贴板上的 URI 时,系统可允许该应用通过临时的 URI 授权来访问数据,这样便只能访问 URI 后面的数据,而非第二个应用中的其他任何内容。 内容提供程序也适用于读取和写入您的应用不共享的私有数据。 内容提供程序作为 ContentProvider 的子类实现,并且其必须实现一组标准 API,以便其他应用能够执行事务。如需了解详细信息,请参阅内容提供程序开发者指南。 Android 系统设计的独特之处在于,任何应用都可启动其他应用的组件。例如,当您想让用户使用设备相机拍摄照片时,另一个应用可能也可执行该操作,因而您的应用便可使用该应用,而非自行产生一个 Activity 来拍摄照片。您无需加入甚至链接到该相机应用的代码。只需启动拍摄照片的相机应用中的 Activity 即可。完成拍摄时,系统甚至会将照片返回您的应用,以便您使用。对用户而言,这就如同相机是您应用的一部分。 当系统启动某个组件时,它会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。例如,如果您的应用启动相机应用中拍摄照片的 Activity,则该 Activity 会在属于相机应用的进程(而非您的应用进程)中运行。因此,与大多数其他系统上的应用不同,Android 应用并没有单个入口点(即没有 main() 函数)。 由于系统在单独的进程中运行每个应用,且其文件权限会限制对其他应用的访问,因此您的应用无法直接启动其他应用中的组件,但 Android 系统可以。如要启动其他应用中的组件,请向系统传递一条消息,说明启动特定组件的 Intent。系统随后便会为您启动该组件。 启动组件 在四种组件类型中,有三种(Activity、服务和广播接收器)均通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。您可以将 Intent 视为从其他组件(无论该组件是属于您的应用还是其他应用)请求操作的信使。 您需使用 Intent 对象创建 Intent,该对象通过定义消息来启动特定组件(显式 Intent)或特定的组件类型(隐式 Intent)。 对于 Activity 和服务,Intent 会定义要执行的操作(例如,查看或发送某内容),并且可指定待操作数据的 URI,以及正在启动的组件可能需要了解的信息。例如,Intent 可能会传达对 Activity 的请求,以便显示图像或打开网页。在某些情况下,您可以通过启动 Activity 来接收结果,这样 Activity 还会返回 Intent 中的结果。例如,您可以发出一个 Intent,让用户选取某位联系人并将其返回给您。返回 Intent 包含指向所选联系人的 URI。 对于广播接收器,Intent 只会定义待广播的通知。例如,指示设备电池电量不足的广播只包含指示“电池电量不足”的已知操作字符串。 与 Activity、服务和广播接收器不同,内容提供程序并非由 Intent 启动。相反,它们会在成为 ContentResolver 的请求目标时启动。内容解析程序会通过内容提供程序处理所有直接事务,因此通过提供程序执行事务的组件便无需执行事务,而是改为在 ContentResolver 对象上调用方法。这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。 每种组件都有不同的启动方法: • 如要启动 Activity,您可以向 startActivity() 或 startActivityForResult() 传递 Intent(当您想让 Activity 返回结果时),或者为其安排新任务。 • 在 Android 5.0(API 级别 21)及更高版本中,您可以使用 JobScheduler 类来调度操作。对于早期 Android 版本,您可以通过向 startService() 传递 Intent 来启动服务(或对执行中的服务下达新指令)。您也可通过向将 bindService() 传递 Intent 来绑定到该服务。 • 您可以通过向 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法传递 Intent 来发起广播。 • 您可以通过在 ContentResolver 上调用 query(),对内容提供程序执行查询。 如需了解有关 Intent 用法的详细信息,请参阅 Intent 和 Intent 过滤器文档。以下文档将为您详细介绍如何启动特定组件:Activity、服务、BroadcastReceiver 和内容提供程序。

问问小秘 2020-03-03 09:47:38 0 浏览量 回答数 0

问题

Kotlin-Firebase-将Uri保存到用户的文件夹图像后,保存错误的Uri

LiuWH 2020-01-12 09:51:59 1 浏览量 回答数 1

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 39926 浏览量 回答数 17
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板