一、Git,版本控制工具

Git和Github简介

Git 是一个开源的分布式版本控制工具,它的开发者就是鼎鼎大名的 Linux 操作系统的作者 Linus Torvalds。Git 被开发出来的初衷本是为了更好地管理 Linux 内核,而现在却早已被广泛应用于全球各种大中小型的项目中。《第一行代码》中用大量笔墨来描写git的命令行写法,然而,我会结合github来一起讲解,首先我们需要下载git到本地,点击进入官网。

git 和 github 两个词初学者经常搞不清谁是谁?Git 是一个版本控制工具,是一个可以安装在你自己机器上的软件。Git 这个单词的中文意思是傻x。关于软件为何以 git 命名,它的作者 Linus 曾经这样调侃:

我是个自负的混蛋,所有我的项目都以我自己的名字命名,先有 Linux,现在是 git 。

不过,也有人认为 Git 是 Global Information Tracker(全局信息跟踪器)的缩写形式,我认为这个说法非常能说明 git 的用途,就是对一个文件夹中的所有数据信息做跟踪,通过记录版本的形式来对内容的变化做记录。

Git 的魅力在于开源文化,2008 年 github 的诞生把开源协作的理念更好的进行了推广,因为 Github 让 Git 变得更为易用。确切的说 GitHub 是一家公司,位于旧金山,由 Chris Wanstrath, PJ Hyett 与 Tom Preston-Werner 三位开发者在2008年4月创办。2008年4月10日,GitHub正式成立,地址:How people build software · GitHub ,主要提供基于git的版本托管服务。一经上线,它的发展速度惊为天人,截止目前,GitHub 已经发展成全球最大的开(同)源(性)社区。

当然选择命令行来操作git也是可以的,可以看这个,图文交杂,很容易看懂,git简易指南,接下来,详细讲解github的运用。

Github注册

我们先要注册一个github账号,来到 github 的首页,就可以看到下面的注册界面:

填写自己的用户名邮箱,再设置一个酷酷的密码,点击 Sign up for Github 按钮,世界就属于你了。对于开源项目 github 是免费的,所以不用管付费相关的内容。接下来初次注册的用户会看到一共四步的 github 使用教程。

今天主要介绍第二步,其他几步回头另行介绍。所以这个四步走,稍微看一下,关了就行了。以后可以到 这里 找到这些内容。另外你可能还会看到要求新用户去验证一下邮箱地址的提示,这个简单,到邮箱之中找到验证邮件,点一下里面的链接就可以了。

注册成功之后你会到 GitHub 的主页面来,你会发现一个导航栏,从左到右依次是 GitHub 主页按钮、搜索框、PR、Issues、Gist、消息提醒、创建项目按钮、我的账号相关。

设置GitHub

新注册的 GitHub 账号,会很简陋,没有自己的项目,第一步我们需要先完善自己的信息,点击右上角自己的小头像,然后选择 Settings 菜单:像头像、Name 建议要设置一个常用的,这两个很有识别性,公开的邮箱也要设置一个,这样那些企业啊、猎头啊就可以通过这个公开邮箱去联系你。

创建项目仓库

Github 上操作虽多,但是都是围绕一个个的项目展开的。

一个项目其实就是一个文件夹,里面放着所有的项目文件,可以是代码,也可以是任意的文档。但是在 github 这里,每一个项目都不仅仅是最新版本的代码,还保持着所有的历史版本和修改记录,当然这个后台就是通过 Git 来实现的。Github 上的项目有一个新名称,叫 ”仓库“ ( repository )。说白了,一个仓库就是一个用 git 进行了版本控制的项目。

点击头像下面的绿色的图标New repository,就可以看到如图:

注意要勾选 Initialize this repository with a README ,然后创建这个项目。也会看到 Create Repository 按钮的上方还有两个选择框,一个是关于 .gitignore 的,另一个是关于 LICENSE 的。这两项如果选择了就是在项目中又多了两个文本文件,一个是 .gitignore 文件,另一个是 LICENSE 文件,暂时都不选就可以,回头需要了可以自己用编辑器新建。注意:私人项目是要付费的,这样别人就不能看到你创建的项目,基本上我们默认选择public公共项目,公司的项目就不要放上来开源了,放一些自己写的小项目还是可以的。

GitHub 基本概念

上面认识了 GitHub 的基本面貌之后,你需要了解一些 GitHub 的基本概念,这些概念是你经常会接触并遇到的。

Repository
仓库的意思,即你的项目,你想在 GitHub 上开源一个项目,那就必须要新建一个 Repository ,如果你开源的项目多了,你就拥有了多个 Repositories 。

Issue
问题的意思,举个例子,就是你开源了一个项目,别人发现你的项目中有bug,或者哪些地方做的不够好,他就可以给你提个 Issue ,即问题,提的问题多了,也就是 Issues ,然后你看到了这些问题就可以去逐个修复,修复ok了就可以一个个的 Close 掉。

Star
这个好理解,就是给项目点赞,但是在 GitHub 上的点赞远比微博、知乎点赞难的多,如果你有一个项目获得100个star都算很不容易了!

Fork
这个不好翻译,如果实在要翻译我把他翻译成分叉,什么意思呢?你开源了一个项目,别人想在你这个项目的基础上做些改进,然后应用到自己的项目中,这个时候他就可以 Fork 你的项目,这个时候他的 GitHub 主页上就多了一个项目,只不过这个项目是基于你的项目基础(本质上是在原有项目的基础上新建了一个分支,分支的概念后面会在讲解Git的时候说到),他就可以随心所欲的去改进,但是丝毫不会影响原有项目的代码与结构。

Pull Request
发起请求,这个其实是基于 Fork 的,还是上面那个例子,如果别人在你基础上做了改进,后来觉得改进的很不错,应该要把这些改进让更多的人收益,于是就想把自己的改进合并到原有项目里,这个时候他就可以发起一个 Pull Request(简称PR) ,原有项目创建人就可以收到这个请求,这个时候他会仔细review你的代码,并且测试觉得OK了,就会接受你的PR,这个时候你做的改进原有项目就会拥有了。

Watch
这个也好理解就是观察,如果你 Watch 了某个项目,那么以后只要这个项目有任何更新,你都会第一时间收到关于这个项目的通知提醒。

Gist
有些时候你没有项目可以开源,只是单纯的想分享一些代码片段,那这个时候 Gist 就派上用场了!

编辑项目

之前创建项目成功后就可以跳转到这里:

可以看到这个项目只包含了一个 README.md 文件,但是它已经是一个完整的 Git 仓库了,你可以通过对它进行一些操作,如watch、star、fork,还可以 clone 或者下载下来。

小结

以上只是简单的讲了一些基本知识,后面为了篇幅就放上几个前辈的博客,可以系统详尽的学习git知识,一个是peter讲Git,在慕课上讲过sublime的一个大神,还有一个就比较耳熟能详了,安卓入门追的一个大神stormzhang Git汇总,这些足够了解git的所有知识了。

二、Notification,通知

通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。

创建通知

发送通知需要通过 NotificationManager.notify() 来实现,该函数的一个必要参数是 Notification 对象,Notification 对象描述了通知的具体内容,构建该对象需要利用 Notification.Builder 类,Notification.Builder 是 Android 3.0 (API 11) 引入的,为了兼容低版本,我们一般使用 Support V4 包提供的 NotificationCompat.Builder 来构建 Notification。具体代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)// 设置通知的基本信息:icon、标题、内容
builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");// 设置通知的点击行为:这里启动一个 Activity
Intent intent = new Intent(this, ResultActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);// 发送通知 id 需要在应用内唯一
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

更新通知

要想更新通知,需要利用 NotificationManager.notify() 的 id 参数,该 id 在应用内需要唯一。要想更新特定 id 的通知,只需要创建新的 Notification,并发出与之前所用 id 相同的 Notification。如果之前的通知仍然可见,则系统会根据新的 Notification 对象的内容更新该通知。相反,如果之前的通知已被清除,系统则会创建一个新通知。

删除通知

删除通知可以有多种方式:
1. 通过 NotificationCompat.Builder 设置 setAutoCancel(true),这样当用户点击通知后,通知自动删除。
2. 通过 NotificationManager.cancel(id) 方法,删除指定 id 的通知
3. 通过 NotificationManager.cancelAll() 方法,删除该应用的所有通知

浮动通知(Heads-up Notifications)

Android 5.0(API 21)引入浮动通知的展现形式,想让通知能够以浮动形式展现,需要设置 Notification 的优先级为 PRIORITY_HIGH 或者 PRIORITY_MAX 并且使用铃声或振动,示例代码如下:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");
// 设置通知的优先级
builder.setPriority(NotificationCompat.PRIORITY_MAX);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 设置通知的提示音
builder.setSound(alarmSound);NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, builder.build());

锁屏通知

Android 5.0 通知现在还可显示在锁定屏幕上。用户可以通过“设置”选择是否将通知显示在锁定屏幕上,并且您可以指定您应用中的通知在锁定屏幕上是否可见。通过 setVisibility() 并指定以下值之一:
1. VISIBILITY_PUBLIC 显示通知的完整内容。
2. VISIBILITY_SECRET 不会在锁定屏幕上显示此通知的任何部分。
3. VISIBILITY_PRIVATE 显示通知图标和内容标题等基本信息,但是隐藏通知的完整内容。

设置 VISIBILITY_PRIVATE 后,您还可以提供其中隐藏了某些详细信息的替换版本通知内容。例如,短信 应用可能会显示一条通知,指出“您有 3 条新短信”,但是隐藏了短信内容和发件人。要提供此替换版本的通知,请先使用 NotificationCompat.Builder 创建替换通知。创建专用通知对象时,请通过 setPublicVersion() 方法为其附加替换通知。

扩展样式通知

通过 Builder.setStyle() 函数可以为通知设置扩展样式,NotificationCompat 提供了三种扩展样式:BigPictureStyle, BigTextStyle, InboxStyle

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)builder.setSmallIcon(R.drawable.notification_icon)
builder.setContentTitle("My notification")
builder.setContentText("Hello World!");NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("邮件标题:");
for (int i=0; i < 5; i++) {inboxStyle.addLine("邮件内容" + i);
}
builder.setStyle(inBoxStyle);

自定义通知

Android系统允许使用RemoteViews来自定义通知。
自定义普通视图通知高度限制为64dp,大视图通知高度限制为256dp。同时,建议自定义通知尽量简单,以提高兼容性。

自定义通知需要做如下操作:
1、创建自定义通知布局
2、使用RemoteViews定义通知组件,如图标、文字等
3、调用setContent()RemoteViews对象绑定到NotificationCompat.Builder
4、同正常发送通知流程

注意: 避免为通知设置背景,因为兼容性原因,有些文字可能看不清。

RemoteViews bigView;
RemoteViews smallView;// 构建 bigView 和 smallView。
...NotificationCompat.Builder builder = new NotificationCompat.Builder(context);// 设置自定义 RemoteViews
builder.setContent(smallView).setSmallIcon(R.drawable.icon_notification);
Notification notification = builder.build();// 如果系统版本 >= Android 4.1,设置大视图 RemoteViews
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {notification.bigContentView = bigView;
}
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(DAILY_PUSH_NOTIFICATION_ID, notification);

通知常见属性和常量

通知的提醒方式

1、声音提醒

默认声音

notification.defaults |= Notification.DEFAULT_SOUND;

自定义声音

notification.sound = Uri.parse("file:///sdcard0/notification.ogg");

2、震动提醒

默认振动

notification.defaults |= Notification.DEFAULT_VIBRATE;

自定义振动

long[] vibrate = {100, 200, 300, 400}; //震动效果
// 表示在100、200、300、400这些时间点交替启动和关闭震动 notification.vibrate = vibrate;

3、闪烁提醒

默认闪烁

notification.defaults |= Notification.DEFAULT_LIGHTS;

自定义闪烁

notification.ledARGB = 0xff00ff00; // LED灯的颜色,绿灯
notification.ledOnMS = 300; // LED灯显示的毫秒数,300毫秒
notification.ledOffMS = 1000; // LED灯关闭的毫秒数,1000毫秒
notification.flags |= Notification.FLAG_SHOW_LIGHTS; // 必须加上这个标志

常见的Flags

FLAG_AUTO_CANCEL
当通知被用户点击之后会自动被清除(cancel)
FLAG_INSISTENT
在用户响应之前会一直重复提醒音
FLAG_ONGOING_EVENT
表示正在运行的事件
FLAG_NO_CLEAR
通知栏点击“清除”按钮时,该通知将不会被清除
FLAG_FOREGROUND_SERVICE
表示当前服务是前台服务

以上参考官方api
更多Notification属性详见Notification。

《第一行代码》阅读记录—Git和Notification相关推荐

  1. 第一行代码阅读笔记---基本知识

    在res中,我们会看到很多目录,分别如下: drawable-hdpi drawable-ldpi drawable-mdpi drawable-xxhdpi layout menu values v ...

  2. Android阅读手札:第一行代码(第一章)

    <第一行代码>作为Android开发入门的经典书籍,是我们非常好的阅读选择,初学者可以迅速了解相关知识,老司机也可以温故知新巩固基础.笔者使用该书的第二版,也就是绿色封面的第一章节< ...

  3. thymealf如何实现传单个变量给html_梦回2013,看尤大vue的第一行代码,如何用30行代码实现vue(超简洁,适合初学者)...

    非非非标题党,干货预警!!! 介绍 大家好,我是清池交友 app 开发日记,记录清池交友 app 开发中学习过程和踩坑日记,伪全栈[1] 技术栈:前端 js,vue,uniapp,后端 java 尤大 ...

  4. 第一行代码——第十三章:继续进阶——你还应该掌握的高级技巧

    目录: 13.1 全局获取 Context的技巧 13.2 使用 Intent传递对象 13.2.1 Serializable 方式 13.2.2 Parcelable 方式 13.3 定制自己的日志 ...

  5. 《第一行代码》总结之实战酷欧天气、发布应用(九)

      第十四章:进入实战,开发酷欧天气            实现一个功能较为完整的天气预报程序.中文:酷欧天气:英文:Cool weather 14.1功能需求和技术可行性分析. (1)应具备以下功能 ...

  6. 《第一行代码》中遇到的问题

    前言: 最近刚刚学完郭霖的第一行代码(第二版)这本书,是我选择入门安卓的一本书,看到很多人都推荐这本书,所以就去图书馆借来趁寒假学习下.但是由于技术是不断更新的,而这本书是16年的,虽然也算是市面上比 ...

  7. 从零开始写安卓APP 《第一行代码》笔记 第一周

    这是软件开发课的任务,本人其实不会java也不会安卓开发.以前只做过web端,因为某课程的爆炸实验单人撸了全栈.不过好在很早前就想学了,这里记录一下过程.放的主要是<第一行代码>的一些笔记 ...

  8. 《第一行代码》综合案例改进版

    经过一端相对较长的时间,终于将郭大神的<第一行代码>看完了,亲自实践了书中所有的大小案例,以及git的使用,当然还补充学习了一些和书中内容相关的扩展知识,以及廖雪峰老师官网的git教程,关 ...

  9. 对系统学习与写博客的看法——学完《第一行代码》有感

    笔者如今学习android有近8个月,此时才真正地学完一本书也甚是惭愧. 在此分享一下自己大概的学习经历.(笔者在大一下就开始学android了,学的时候只有c与c++的基础,一个学期+寒假在OJ上刷 ...

最新文章

  1. 快速连续点击两次出现相同内容的解决方法
  2. [ATF]-ATF启动--BL31跳转到optee和uboot
  3. html文字自动上翻,jQuery超酷文字随机翻转变换动画特效
  4. 【知识图谱】知识推理
  5. 刘强东说过,如果京东失败99%是我个人造成,这话会灵验吗?
  6. hashmap为什么是2的倍数_HashMap源码解析(jdk1.8)
  7. Mybatis源码分析之(七)Mybatis一级缓存和二级缓存的实现
  8. ADT安装好在Eclipse后运行模型Android提示Re-installation fai...
  9. win7,8走网络打印机出现删除设备和打印机门未关闭的解决方法
  10. 教之初计算机考试试题,教之初题库管理系统操作教程-考题处理
  11. 计算机会计学ufo报表,UFO报表管理实验报告.doc
  12. 对象转json字符串(带转义字符)
  13. Android数据加密之——Base64编码算法
  14. 小程序心知天气API获取数据
  15. 集中式自动驾驶控制域中的高精地图数据解析算法
  16. 原神—薄樱初绽时(html+css+js仿原神2.5首页,前端课设)
  17. 项目管理十大知识领域和五大过程组
  18. RMAN-06207 RMAN-06208
  19. Unity—对话系统GalGame游戏文字对话制作
  20. 分享第一次接触Atmel AVR微控制器开发板

热门文章

  1. android dolphin 手柄,使用安卓手机充当PC上WII模拟器手柄
  2. 铁路cj继电器,一种铁路继电器底座锁住方法专利_专利申请于undefined_专利查询 - 天眼查...
  3. kettle连接sqlserver报错
  4. 前端实现elementUi table表格分页
  5. 点击按钮播放声音简单实现。
  6. 王者荣耀产品分析(本人不是产品,只是自己分析了一下)
  7. 互联网公司如何塑造一支有创业精神的技术团队?
  8. Spring Boot集成Druid异常discard long time none received connection.
  9. 微型计算机原理和接口技术试卷,2017-1微机原理和接口技术试卷A(答案)-.doc
  10. 闭关修炼——one——struts2