利用 Android 手机打造来电通知计划

最近住的地方总在晚上停电,还让不让人活了,大热天的,于是就晚上在外面先找个凉快的地方呆着,但是来电的时间不确定,有时候感觉应该来电了,回去了还是没电,那个热啊。那么问题来了,要是屋里来电了有人告诉我就好了!于是计划写一个小程序让它在屋里来电后通知。

SwipeRefreshLayout 源码

简介

官方文档

SwipeRefreshLayout 是一个下拉刷新控件,几乎可以包裹一个任何可以滚动的内容(ListView GridView ScrollView RecyclerView),可以自动识别垂直滚动手势。使用起来非常方便。

Android 中获取当前的 Activity

需求:获取当前的 Activity 对象,Activity 是系统创建的,一种方法:在 onCreate 的时候拿到引用,这样就得修改 onCreate 方法,还得维护一个数组去管理 Activity 的引用。第二种方法:通过反射拿到 ActivityThread 中的 mActivities 属性,进而拿到当前的 activity 对象( paused 为 false 的activity)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static Activity getActivity() {
try {
Class activityThreadClass = Class.forName("android.app.ActivityThread");
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map activities = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { // 4.4 以下使用的是 HashMap
activities = (HashMap) activitiesField.get(activityThread);
}else{ // 4.4 以上使用的是 ArrayMap
activities = (ArrayMap) activitiesField.get(activityThread);
}
for (Object activityRecord : activities.values()) {
Class activityRecordClass = activityRecord.getClass();
Field pausedField = activityRecordClass.getDeclaredField("paused"); // 找到 paused 为 false 的activity
pausedField.setAccessible(true);
if (!pausedField.getBoolean(activityRecord)) {
Field activityField = activityRecordClass.getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(activityRecord);
return activity;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

文章来自: https://hanks.pub

MongoDB 入门

什么是 MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值 (key=>value) 对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

Express 网站开发

express 开发一个简单的网站,网页模板引擎使用 jade,样式基于 bootstrap,数据库使用 MongoDB

认识 Express

Node.js 本身对 http 模块封装的不够方便,于是相应的 web 开发框架便应运而生,express是使用比较多的,express 比较轻量级,围绕 http 模块进行了封装,但是支持很多扩展使它变得非常强大。

Linux 的 crontab 定时重复任务

cron (crond) 工具是 Linux 上面的用来执行周期性任务的工具,比如每天凌晨进行数据统计,定期备份数据库,写缓存数据到硬盘、日志清理等。

Android 中 NestedScrollingParent 接口

NestedScrollingParent 接口

接口(android.support.v4.view.NestedScrollingParent)

Nested : 嵌套的

几个实现类 介绍
CoordinatorLayout 非常强大,协调它里面 View 的嵌套滑动
NestedScrollView 类似 ScrollView, 但是支持嵌套滑动的
SwipeRefreshLayout SwipeRefreshLayout 支持竖直方向的下拉刷新控件

学习 iOS 中 UITableView

iOS 中的列表对应的控件为 UITableView ,可以通过给 UITableView 设置数据源来显示不同的数据。结合 Android 开发给 RecyclerView 或者 ListView 显示数据的步骤:

  1. 界面中添加 ListView (xml)
  2. 代码中拿到 ListView 的引用(findViewById)
  3. 设置 ListView 的 item 的个数(一般为数据源的个数)
  4. 创建每个 item 的布局(xml)
  5. 设置 ListView 对应每个位置的 item 显示的内容(数据源的每一项)
  6. 刷新界面 adapter 的 notifyDataSetChanged()

iOS 使用 UITableView 的步骤:

  1. 界面中添加 UITableView (storyboard)
  2. 代码中拿到 UITableView 的引用 (按住 ctrl 拖动控件到代码中引用)
  3. 设置 UITableView 的 cell 的个数(一般为数据源的个数)
  4. 创建每个 item 的布局 (xib)
  5. 设置 UITableView 对应每个位置的 cell 显示的内容(数据源的每一项)
  6. 刷新界面 tableview 的 reloadData()

Ubuntu 上搭建 LAMP 环境

记得前两年玩 PHP 的时候 windows 下有个 wamp的集成环境,一个安装包,直接安装就搭建好了,还带 mysql 管理界面。

强大的 RxJava 也要进行错误处理

onNext, onComplete, onError,onErrorObservable 序列传递过程中出现异常时被调用,然后终止Observable 序列的传递,以此通知所有的观察者发生了一个不可恢复的错误。但是有好多时候需要我们手动去终止序列,例如当序列传递时不满足某个条件了就不在进行后续的操作,这可能并不是一个异常,需要我们手动抛出。

开发一款 APP 要有计划哦

封装一些常用类,根据项目需求确定库的选择,项目整体架构,后续扩展的考虑,组件化开发移植到其他平台的可能。

开发过程的一些总结

记录一些开发过程中的一些感悟。开发一个 App,如 Android,iOS,Web App 等,也就是处理两部分:界面数据,还有比较难处理的是数据和界面元素之间的关系。

MacBook Air I

使用 Vue.js 创建的 Calendar

使用 Vue.js 进行数据与视图的绑定,数据更新会让视图自动进行更新,类似 Android 里面的 DataBinding
实现一个 HTML的 日历效果。

日历

学习 Jade

优秀的模板引擎 Jade ,减少写代码,提高可读性,提高生活质量。。。