【Android】RxJava 入门详解

本文转载自 给 Android 开发者的 RxJava 详解 —— by 扔物线

前言

我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJava 。有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么?

鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用过程中对 RxJava 有了一些理解,我决定写下这篇文章来对 RxJava 做一个相对详细的、针对 Android 开发者的介绍。

这篇文章的目的有两个:

  1. 给对 RxJava 感兴趣的人一些入门的指引
  2. 给正在使用 RxJava 但仍然心存疑惑的人一些更深入的解析

在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码:
RxJava : https://github.com/ReactiveX/RxJava
RxAndroid: https://github.com/ReactiveX/RxAndroid

引入依赖:

1
2
3
//(版本号是文章发布时的最新稳定版)
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

【Android】APK瘦身记,实现将近一半的压缩效果

本文转载自知乎: APK瘦身记,如何实现高达53%的压缩效果 —— by 阿里聚安全

一、我是怎么思考这件事情的

APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律。不过随着移动端技术近两年的飞速发展,一些新的思维方式和优化方法也逐渐涌现和成熟起来。笔者在实践过程中踩过一些坑,收获了一些经验,在这里做个思考和总结,所以随笔给大家,希望对大家从事相关工作的时候有所帮助和参考,同时也是抛砖引玉,希望大家共同探讨这个开放性的话题。

关于为什么APK要瘦身,这个不多说,只从三个方面唠叨一下,对于用户(或者客户)来说,APK越大,在下载安装过程中,他们耗费的流量会越多,安装等待时间也会越长;对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的);对于研发来说,是一种优化改进技术的机会。

基于社区发现算法和图分析Neo4j解读《权力的游戏》

导读

几个月前,数学家 Andrew Beveridge 和Jie Shan在数学杂志上发表《权力的网络》,主要分析畅销小说《冰与火之歌》第三部《冰雨的风暴》中人物关系,其已经拍成电视剧《权力的游戏》系列。他们在论文中介绍了如何通过文本分析和实体提取构建人物关系的网络。紧接着,使用社交网络分析算法对人物关系网络分析找出最重要的角色;应用社区发现算法来找到人物聚类。

其中的分析和可视化是用Gephi做的,Gephi是非常流行的图分析工具。但作者觉得使用Neo4j来实现更有趣。

导入原始数据到Neo4j

原始数据可从网络上下载,格式如下:

1
2
3
4
5
Source,Target,Weight
Aemon,Grenn,5
Aemon,Samwell,31
Aerys,Jaime,18
...

【D3.js】力导向布局 + 圆形图片展示的人物关系

前言

使用d3的力学图(力导向图)与生活中常见的人物关系图结合,已经有了很好的例子: 【 D3.js 进阶系列 — 2.0 】 力学图 + 人物关系图,博主实现了下面这种样式,已经相当不错了。

但是对于想把节点的方形图片换成圆形头像,网上的资料却很少,本例子就在上面的实例的基础上实现圆形头像,让人物关系图看起来更漂亮了一个档次。两个主要文件如下:

【Android】微信热修复 Tinker 的集成和使用

简介

Tinker: n. 〈英〉小炉匠,补锅匠,修补匠

Tinker 是微信官方开源的 Android 热修复框架,支持在无需升级APK的前提下更新 dex, library and resources 文件。它也就是今年9月24才刚刚开源,几天功夫star数就超过3000,可见在开发者中的影响力有多大,也说明这是一个刚需。

Tinker GitHub: https://github.com/Tencent/tinker

使用步骤

一个小坑

很多人遇到的第一个错误就是提示 tinkerId is not set ,这个在tinker-sample-android的app/build.gradle 中默认设置为Git的提交版本号,如下

1
2
3
def getTinkerIdValue() {
return hasProperty("TINKER_ID") ? TINKER_ID : gitSha()
}

如果不是通过git clone方式下载的就可能出现这个错误,其实可以简单粗暴的方式解决,那就是在app/build.gradle中把tinker id写死:

1
2
3
def getTinkerIdValue() {
return hasProperty("TINKER_ID") ? TINKER_ID : "tinker_id_2333"
}

下面介绍一下如何一步步的把Tinker集成到自己的项目中,以及会遇到哪些问题该如何解决。

Android 热修复原理和实现

查看原文: Android 热修复,没你想的那么难 —— by kymjs张涛

一种动态加载最简单的实现方式,代码实现起来非常简单,重要的是这种思路和原理 。

《插件化从放弃到捡起》第一章,首先看一张图:

这张图是我所理解的 Android 插件化技术的三个技术点以及它们的应用场景。今天以 【Qzone 热修复方案】为例,跟大家讲一讲插件化中 热修复方案 的实现。

使用Neo4j进行全栈Web开发

在开发一个全栈web应用时,作为整个栈的底层,你可以在多种数据库之间进行选择。作为事实的数据源,你当然希望选择一种可靠的数据库,但同时也希望它能够允许你以良好的方式进行数据建模。在本文中,我将为你介绍Neo4j,当你的数据模型包含大量关联数据以及关系时,它可以成为你的web应用栈的基础的一个良好选择。

Neo4j是什么?

图1. Neo4j Web控制台

Neo4j是一个图形数据库,这也就意味着它的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。在Neo4j中,节点以及关系都能够包含保存值的属性,此外:

  • 可以为节点设置零或多个标签(例如Author或Book)
  • 每个关系都对应一种类型(例如WROTE或FRIEND_OF)
  • 关系总是从一个节点指向另一个节点(但可以在不考虑指向性的情况下进行查询)

D3.js加载本地json文件的问题

问题

打开本地html文件时,报错如下

1
2
3
XMLHttpRequest cannot load file:/cities.csv. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load

分析

原因是因为浏览器为了安全性考虑,默认对跨域访问禁止,不允许直接读取本地文件。

解决

给浏览器传入启动参数(allow-file-access-from-files),允许跨域访问。
Windows下,运行(CMD+R)或右键桌面快捷方式->属性->目标

【Android】Broadcast广播机制总结

原文链接: Android总结篇系列:Android广播机制

1. Android广播机制概述

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:

  1. 同一app内部的同一组件内的消息通信(单个或多个线程之间);

  2. 同一app内部的不同组件之间的消息通信(单个进程);

  3. 同一app具有多个进程的不同组件之间的消息通信;

  4. 不同app之间的组件之间消息通信;

  5. Android系统在特定情况下与App之间的消息通信。

从实现原理看上,Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型。因此,从实现的角度来看,Android中的广播将广播的发送者和接受者极大程度上解耦,使得系统能够方便集成,更易扩展。具体实现流程要点粗略概括如下:


Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :