Skip to content

Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?
2014-12-31
31 December
On December 31, 2014
In Article Collection(聚宝收藏), Design Patterns(设计模式), Knowledge Base(心得笔库)

Chrome扩展程序各结构间交互方式

在之前的文章里介绍了很多关于开发Chrome扩展程序时会用到的各部件,对每个部件的功能和用途做了比较详细的描述。不过单单知道怎么使用各个部件还不够,前面有提到每个部件的优缺点:Browser Action和Page Action不能长期保留数据状态;Background Page和Event Page没有用户界面;Content Scripts无法触发DOM原本的事件。所以就需要让这些部件能够联系在一起使用,用其优势不足其它的劣势。

通过阅读网上关于Chrome扩展程序的文档和文章,以及自身的试验和实践,对于Chrome扩展程序中所用到的交互方式主要可以分为三类:调用接口(Interface),消息传送(Message),脚本注入(Injection)。

下图展示了各个部件直接交互的方式和会使用到的API方法:
Chrome-Extension-Interaction

话说回来其实三种方式都是调用Chrome扩展开发中直接提供的API,只是API的设计结构、使用方式、作用对象以及安全性等有些许差别,所以我才臆想成三类不同方式。

而从上图的分布,还可以看出我对于Chrome扩展程序各部件的分类可以归为:“近扩展(Close to Extension)”和“近页面(Close to Page)”。也就是一类主要作用在扩展程序上,另一类主要作用在页面本身。
Read More →

2014-11-08
08 November
On November 8, 2014
In Article Collection(聚宝收藏), Design Patterns(设计模式), Front Interface(界面构想), Knowledge Base(心得笔库)

Chrome扩展程序开发基础介绍

虽然现在的工作主要是Android平台的开发,但是对于Web的兴趣总是无法割舍。只可惜因为不是日常工作的一部分,许多Web技术其实学得都不精湛,也常常会淡忘了解过的知识。好在有了Chrome这个强大的前端神器,观察页面布局、学习脚本源码、调试代码样式都变得异常自如,也让学习Web变得方便很多。

前阵子为了完成一些功能,学习了一下Chrome扩展程序(Chrome Extensions)开发的基本内容和步骤,觉得为自己的Web技术找到了新的用武之地。不用再纠结和苦恼如果设计发开出功能全面界面吸引人的应用或系统;做出一些插件来扩展喝补强当前页面功能也是很有意义的。比如常看一些网页被旁边的广告栏打扰了,可以写个插件把display设成none;如果在线看一些文档,也可以做个插件用来标记哪些内容比较重要然后呈现时做个高亮显示。

开发Chrome扩展程序也非常容易上手,只要会HTML,CSS和JavaScript就可以开始了。不需要学习新的语言,也不需要了解新的布局方式,也不用知道新的IDE,还不用编译。当然Chrome扩展程序的基本架构和组成结构还是需要额外了解的,这样才能知道每个部分要如何实现,保证扩展程序能流畅运行。

Chrome扩展程序的官方文档让人感觉有点凌乱,可能是扩展程序开发算不上热门内容,也可能是Chrome的版本升级太频繁,所以没有很好地整理文档。本文就来总结这些知识内容与大家分享,也方便自己以后回顾。

入门准备和基础概念

既然是开发Chrome扩展程序,自然需要Chrome浏览器,然后下载一些示例程序。一般的Chrome扩展程序是.crx文件,但实质上它只是一个压缩文件,随时可以以zip格式来解压查看里面的内容。但是为了开发方便,Chrome也支持直接上传文件夹,但是要先打开”开发模式”。启用方式很简单,只要开打Chrome浏览器,在Extensions窗口下(可通过菜单开打,也可以在地址栏里输入chrome://extensions来进入)勾选Develop mode就可以了:
Developer-Mode

这样就可以直接上传文件夹来安装在开发中的扩展程序了。如果开发完成也通过这里进行打包然后发布到Chrome商店上,不过这部分不在本文中介绍。

对比直接上传的和从商店上安装的扩展程序,可以发现几个明显的不同:
Unpacked

以文件夹格式上传的,会显示Loaded from项来指示扩展程序在文件系统中的位置,另外还可以通过刷新或者点击Reload链接按钮来更新修改过的扩展程序。而安装的则无法这么简单的来更新和升级了。

当然其他的内容都是一样的:名字、版本号这些接下来会介绍如何定义;权限(Permissions)的内容比较多本文也不会涉及,可以在官方文档中了解。还有ID这一项,它是Chrome指定给每个扩展程序的唯一标示,可以用它在Chrome浏览器中通过链接chrome-extension://<extensionID>/<pathToFile>打开扩展程序中的任意文件。比如Evernote的选项页面就是:chrome-extension://pioclpoplcdbaefihamjohnefbikjilc/options.html
Evernote-Options

对于没有打包成.crx文件的扩展程序,Chrome会根据文件夹所在位置来指定生成ID;在第一次打包扩展程序时,Chrome会生成一个Private Key文件,之后就可以用同样的Key来标示同一个程序的版本升级,Chrome也就会赋予它同样的ID。之后也会介绍这个ID还有其他的用处。
Pack-Extension
Read More →

2014-10-26
26 October
On October 26, 2014
In Article Collection(聚宝收藏), Front Interface(界面构想), IT Products(数码产品)

HyperDock,让Mac的窗口飞

三年前写了一篇文章,介绍了Windows 7下的Aero效果,其实最终是想引出来写Mac OS上能产生类似功能的HyperDock应用程序,可惜这一拖,就拖到连Windows 10都快要发布了。没有关心Windows是否有延续着非常华丽又实用的功能,毕竟过去4年里,Mac才是工作和日常中一直使用的电脑,能在Mac上找到实用的软件和工具来提高效率才有实际意义。对于Windows的怀念也只剩下Visual Studio和Viso,但每样东西都总能找到一个相近的代替品。
hyperdock

虽然过去了很长的时间,但是在这几年中HyperDock也有了更多的提升,而且还没有步入像消息通知软件Growl、支持多tab的TotalFinder等那样命运,在Mac系统的数次升级中被集成到系统之中,让用户觉得安装这些程序变得多余。虽然很多其它免费的或者稍便宜的程序也能呈现Aero的效果,但是都不及HyperDock全面和实用。所以虽然HyperDock收费$9.99,依然觉得值得拥有。

HyperDock官方只介绍了很简单的功能和基本的操作,其实它能做的远比其列出来的多得多。经过了这些年的使用,让我对HyperDock的功能更加得多。所以来完成之这么多未完成的文章,来分享HyperDock给Mac用户们,特别是开发者们希望它也能带给大家带来高效的开发体验。
Read More →

2014-09-30
30 September
On September 30, 2014
In Data Structures(数据结构), Design Patterns(设计模式), Knowledge Base(心得笔库), Mobile Development(移动开发)

了解Android中的Preference结构的设计与实现

之前的文章讲到Preference和Setting在本质上是相似的,并相信介绍了SharedPreferences的基本使用方式和其代码设计。但SharedPreferences只能算是设备背后的不可见的存储那一部分,而可见的界面其实对于用户来说更加重要,而这一部分就是本文要讲的那些在android.preference包下的各种Preference。

不过本文不会涉及这些Preference的使用方式,比如如何定义XML文件、如何使用PreferenceActivity和PreferenceFragment加载设置,这些都可以在Android Developer的官方指南里了解到详情。本文主要通过分析源代码来分享Preference的设计和实现方式,让开发者们在今后更加顺手地使用和扩展Preference类,或者在设计其他类似的界面和功能时可以提供参考帮助。

Preference概览

Android的设置界面本质上就是ListView:PreferenceActivity是继承了ListActivity;而3.0以后推荐使用的PreferenceFragment虽然没有继承ListFragment,但也定义了ListView字段。

settings

Read More →

2014-08-20
20 August
On August 20, 2014
In Design Patterns(设计模式), Knowledge Base(心得笔库), Mobile Development(移动开发)

了解Android API中的SharedPreferences

Preference翻译为偏好,但实际上它可以算是Setting(设置)的别名。两种叫法给人的差异在于针对的对象不同:设置更倾向于设备的属性,修改设置便是改变设备的功能;偏好则倾向于用户的性格,用户基于其个人的偏好来来形成设备的差异化。但是总体而言,他们是一致的,都是通过用户的需求改变设备的体验。

在Android的开发过程中,会在使用的API中见到很多名字中带有Preference的类和接口,此篇文章就来介绍一下这些“*Prefere*”的功能和用途。

在Android提供API中,带有Preference的其实主要分为两类:一类是android.content包下的SharedPreferences,另一类则是android.preference包下的Preference。它们分别实现不同功能,却又相互联系合作完成对Android程序的控制。

SharedPreferences简介

SharedPreferences是以复数形式存在,因为在Android中它是用来存储键值对(Key-Value Pair)数据的集合。API中包含了多个方法来方面读取相应类型的数据:

[codesyntax lang=”java” lines=”normal”]

String getString(String key, String defValue);
Set<String> getStringSet(String key, Set<String> defValues);
int getInt(String key, int defValue);
long getLong(String key, long defValue);
float getFloat(String key, float defValue);
boolean getBoolean(String key, boolean defValue);

[/codesyntax]
Read More →

2014-07-19
19 July
On July 19, 2014
In Article Collection(聚宝收藏), Knowledge Base(心得笔库), Mobile Development(移动开发)

开发Android必知的工具

tools程序开发有时候非常依赖使用的开发工具,好的完备的开发工具可以让开发人员的工作效率有大幅度的提高。开发Android也是如此,大家可能都离不开Eclipse或Android Studio这些工具,但他们其实是集成开发环境(Integrated development environment, IDE),把很多工具集成在一个里面,配合可视化界面和键盘快捷键,方面寻找和使用。

不过有时候工具集成太多了,往往让人感到迷惑容易遗忘某个工具的存在。本文就谈谈Android开发和Debug时可使用的一些工具,这些工具都可以在安装了Android SDK的Eclipse或Android Studio找到相应的菜单和按钮来打开使用。但考虑到IDE很多时候打开速度实在太慢了,还是考虑直接使用指令在终端单独开打它们吧。

如果安装了Android Studio,这些工具可以在其安装包中找到,比如在Mac下它们就保存在/Applications/Android Studio.app/sdk/tools路径下。如果是使用Eclipse,那么就需要手动下载Stand-alone Android SDK,解压之后也能在其下的tools文件夹里找到。
Read More →

2014-06-24
24 June
On June 24, 2014
In Front Interface(界面构想), IT Products(数码产品), Mobile Development(移动开发)

Amazon的Fire Phone之于Android开发者

在上周Amazon也耐不住加入了手机竞争行列之中,发布了自己的Fire Phone,于是Android家族又多了一位变种成员,Android系统的碎片化程度也进一步加剧。因为工作的关系,我有幸在上个月就得到了一部工程机为其做提前开发,不过因为政策原因所以到现在才能来谈谈对这部新手机的看法。

对于Fire Phone的功能以及外观,官方网站和各家技术网站都有了详尽的介绍和报道,再者因为我拿到的是工程机,无法体现到完备的功能展现,因此本篇文章谈的主要是Fire Phone对于开发者而言所要面对的问题和状况。
Read More →

2014-06-13
13 June
On June 13, 2014
In Article Collection(聚宝收藏), IT Products(数码产品), Mobile Development(移动开发)

关闭Android File Transfer的自动启动功能

作为一个Mac和Android的深度用户,Android File Transfer可以说是电脑上必备的应用程序。虽然我的大部分的Android设备都已经开启了开发者模式,所以基本的设备与电脑间的文件传输功能都可以用adb pull和adb push指令完成。但是Android File Transfer的可视化界面和自然的拖拽还是显得更加的方便。而且当设备连接上电脑时,程序就会自动启动,也非常的直接和实用。

android-file-transfer

不过这个自动启动功能,最近还是带来了不少的麻烦。因为每天都在做Android开发测试,所以会频繁的连接和断开设备,于是Android File Transfer就反复的起来打扰我,而且不知道为什么经常出现死机的状态:鼠标无法移动,按键盘也没有任何响应。虽然在重新断开再连接,反复几次之后电脑也会回复正常,但是不停碰到这样的情况也是非常恼火的。所以就找了一下关闭其自启动功能的方法,分享在此。
Read More →

2014-05-23
23 May
On May 23, 2014
In Knowledge Base(心得笔库), Language Tips(语言初试), Mobile Development(移动开发), Special Tricks(奇技妙招)

使用adb shell dumpsys检测Android的Activity任务栈

谈起Android程序开发,就需要了解其四个主要的部件:Activity、Service、ContentProvider、 BroadcastReceiver。而其中Activity是唯一直接控制程序界面呈现,直面用户操作的部件(当然BrowadCastReceiver也能通过桌面控件(App Widgets)来呈现有限的操作界面)。Android对于Activity有严格的生命周期控制,以限制开发者在适当的回调函数里的放上合适的代码。对于多个Activity的转换,Android也有非常好的管理和流畅的切换,对此Android还引入了任务栈(Task Stack)的概念,这个概念对于Android设备上得返回按键有极其重要的联系。

(大部分文档都将其表述为Tasks and Back Stack,但从官方文档的描述来看,Android的相对于Activity讲到的Task都视为一个存放Activities的Stack,所以将其称为Task Stack也不为过。)

在AndroidManifest中申明所要用到的Activity时可以设置不同的launchMode来得到不同的Activity“启动”效果。在使用startActivity开启新的Activity时,传入的Intent也可以设置不同的Flag来达到不同的效果。另一方面,在Activity启动时它可能又开启了另一个Activity,或者调用了finish()函数终结了Activity。

这使得Activity栈变得无法掌握,有时候按下返回按钮或者点击关闭当前Activity的操作,都不知道Android系统会把程序带到那个Activity,不确定这是否是最后一个Activity以致退出了整个程序。亦或者一些按钮和操作循环产生Activity而造成内存膨胀。对于这些问题,如果能够在调试期间知道当前任务栈的情况,就能很方便的观察和发现问题存在的原因,进而选择正确的launchMode,设置恰当Intent的Flag来使程序达到预期的效果。

Read More →

2014-04-28
28 April
On April 28, 2014
In Data Structures(数据结构), Design Patterns(设计模式), Language Tips(语言初试)

各种面向对象程序语言的toString方法实现

字符串(String)类型在程序语言中都有非常广泛的使用,因此字符串(String)也同整型、浮点型等一样被作为基本数据类型提供给开发者直接使用。在面向对象程序语言中,String作为对象的类,被赋予了各种方法来方便对String的操作和变换。而其他类,常常也会有默认的方法能让该类的实体对象转变成字符串(String)对象。比如最常见的就是Java和C#的toString()方法了。

将对象转换成字符串有几个好处:可以打印记录方便debug;可以存储为JSON或CSV等类型的文档又具有可读性。另一方面程序语言提供方法会在一些情况被隐式的调用来转换成字符串,比如对象和字符串拼接、String类型强制转换等等。开发者也可以重定义这些方法以得到希望的格式出现在上述情况中。

本文就来总结归纳一下当前流行的面向对象程序语言对“toString()”方法的实现方式。
Read More →

Posts pagination

Previous 1 … 6 7 8 … 11 Next
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • AI Dev 26 x SF 体会
  • Google Pixel Phone 1 to 10
  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API App Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Google Gradle Hearthstone HTML Initialization Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.