code fragment
文章平均质量分 59
time_hunter
这个作者很懒,什么都没留下…
展开
-
Code Fragment-使用继承封装技术层次
最近花了一些时间去看一些小游戏的东西,android中可以通过SurfaceView来实现绘制,并有相应的生命周期的方法,如@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceCr原创 2014-02-23 23:29:34 · 648 阅读 · 0 评论 -
Code Fragment-方法的长参数序列可进行封装
本文借鉴于《重构-改善既有代码的设计》下面的代码来自Android源码,分别是Android2.3以及Android4.0的Launcher代码。2.3的实现代码如下:void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, DragView dragView, Object d原创 2013-09-01 23:59:42 · 477 阅读 · 0 评论 -
Code Fragment-同一层级的代码段封装成方法。
同一层级的代码段可以封装成方法,这样显示有一种层级美。下面的是Android code:packages/apps/Calendar/src/com/android/calendar/CalendarController.javaprivate void launchSelectVisibleCalendars() { Intent intent = new Intent(原创 2013-09-07 10:00:47 · 1247 阅读 · 0 评论 -
Code Fragment-当前程序结束的时候,做一些清理的操作。
在程序结束的时候,当然可以是类,也可是Activity或Application。我们可以主动调用一些清理的操作。如:packages/apps/Settings/src/com/android/settings/bluetooth/DockService.java中的onDestroy代码处理如下:@Overridepublic void onDestroy() { if原创 2013-09-07 02:10:27 · 1707 阅读 · 0 评论 -
Code Fragment-通过位运算来表达状态
可以用位运算来标记不同的状态,使用不同的移位能够保证它们状态的不同如下,本例子参考自Android code/frameworks/base/core/java/android/app/DownloadManager.java/** * Value of {@link #COLUMN_STATUS} when the download is waiting to start.原创 2013-09-06 23:22:16 · 696 阅读 · 0 评论 -
Code Fragment-尤大表达式在Java中没有必要
本文借鉴与《编写可读代码的艺术》经常看到如下的表达:public void removeEventListener(String type, EventListener listener, boolean useCapture) { if (null == mListenerEntries) { return; } 。原创 2013-08-30 21:57:33 · 485 阅读 · 0 评论 -
Code Fragment-对于简单的数据类,通过覆盖toString方法,打印关键信息。
简单的数据类,可以通过覆盖Override toString方法打印关键的信息。例如:在Android Launcher中,ItemInfo的toString 得到了覆盖。@Overridepublic String toString() { return "Item(id=" + this.id + " type=" + this.itemType + " contai原创 2013-08-18 00:44:32 · 637 阅读 · 0 评论 -
Code Fragment-对于if语句中的boolean值分开判断的处理。
本文参考自《代码整洁之道》,这本书,非常好!向方法中传入boolean值参数,用于判断逻辑并分开执行。缺点:方法签名立即变得复杂起来。此方法做的事情多余一件。实例: /** * @param isChecked */ protected void setAllDayViewsVisibility(boolean isChec原创 2013-08-17 01:28:40 · 908 阅读 · 0 评论 -
Code Fragment-删掉那些认为有用而注释掉的code。
本文思想参考自《Clean Code》在android的源码里,有这样一段code。 // This is to replace p.setStyle(Style.STROKE); canvas.drawRect() since it // doesn't work well with hardware acceleration// private void原创 2013-08-28 23:50:59 · 613 阅读 · 0 评论 -
Code Fragment-使用有意义的数字计算表达式代替具体的常量结果
使用有意义的计算表达式来代替具体的常量结果。例如:短信消息的重试,会有一些重试的时间策略,一些计算好的时间可能如下:private static final int[] sDefaultRetryScheme = { 0, //现在 60000, //1分钟 300000, //5分钟 600000, //10分钟 1800000原创 2013-08-17 10:37:14 · 657 阅读 · 0 评论 -
Code Fragment-减少嵌套层数,提前结束返回。
本文参考自《编写可读代码的艺术》,这本书,非常好!本文主要介绍两种处理问题的方式,,减少嵌套层数。嵌套的层数无疑增加了代码的复杂度。尽早return,对于能够处理的判断,尽早的处理处理,而后期的修正也会使代码更直接明了。一个例子,重构前public synchronized Drawable getAvatar(Context context, Drawable原创 2013-08-16 00:01:48 · 706 阅读 · 0 评论 -
Code Fragment-相似功能放在一块
下面是Android Source的packages/apps/Phone/src/com/android/phone/GsmUmtsCallForwardOptions.java里面的一段code。package com.android.phone;//省略一些代码public class GsmUmtsCallForwardOptions extends TimeConsuming原创 2013-08-14 23:29:50 · 886 阅读 · 0 评论 -
Code Fragment-构造工具类XXXUtils
工具类的特点:使用参数传递的方法代替成员变量。(通过参数传递,使得方法能够声明为static)方法大多是static方法。通过私有的构造器来强化他的工具类的角色。工具类常命名为:XXXUtils一个例子:package com.android.calendar;//省略无关代码。public class Utils { public static int原创 2013-08-14 23:58:57 · 742 阅读 · 0 评论 -
Code Fragment-确定一个类的字段顺序,并在使用的地方坚持这个顺序
本文参考自《编写可读代码的艺术》,这本书,非常好!简单的Java数据类,通常会有很多的成员变量,记录一种顺序,并在使用的时候坚持这种顺序,会感觉代码更有条理。下面是一个Student类的例子package com.jue.test;public class Student { // 一种有意义的排列顺序 public final static int INDEX_ID原创 2013-08-13 23:42:10 · 488 阅读 · 0 评论 -
Code Fragment-简单的数据类直接使用public字段来访问设值。
在UI调用频繁的地方,或者循环里面,经常有一些数据类的使用,可以直接使用它的public字段访问,代替方法。static ArrayList getItemsInLocalCoordinates(Context context) { ArrayList items = new ArrayList(); final ContentResolver cr = context原创 2013-09-03 00:47:10 · 681 阅读 · 0 评论 -
Code Fragment-封装重复代码的代码
封装重复代码的方法有:提取方法:在一个类里提取重复部分的code生成方法,在其他使用的地方直接调用。pull up方法:把两个兄弟类中重复的方法,放到父类中实现。提取成类:使用组合的方法。封装成静态的工具类。使用单例。重载类型的方法,参数少的去调用参数多的,在多出的参数里传入默认值。原创 2013-12-06 23:53:07 · 5804 阅读 · 0 评论 -
Code Fragment-根据逻辑意义确定数据库结构
数据库的设计:根据逻辑意义封装成表。根据数目对比关系确定表中字段关系。Android Calendar的实现原创 2013-11-22 00:40:44 · 515 阅读 · 0 评论 -
Code Fragment-使用正则表达式表示过滤
本文参考自《会说话的代码》,本书值得一看一个文本框中,只允许下列字符:0~9,a,b,e,:。那么对应的检验方法可能如下:public static boolean isValidate1(char text) { String[] allowedChars = new String[] { "0", "1", "2", "3", "4", "5", "6", "7",原创 2013-11-06 23:49:48 · 509 阅读 · 0 评论 -
Code Fragment-简单的打印时间的操作
Android中用于检测时间相关的工具有TrackView很是强大,自己也写了一个简单的打印时间的类,可以用于一些简单的时间使用检测。效果如下:I/Stack (21850): ---------------------------------测试方法运行时间的调用 START ---------------------------------I/Stack (21850):原创 2013-11-03 21:14:24 · 492 阅读 · 0 评论 -
Code Fragment-使用枚举策略模式表示状态
代码如下:package com.jue.test;public enum DownloadStatus { STATUS_DOWNLOAD_ING("下载中", "下载时的icon", "点击暂停"), STATUS_DOWNLOAD_DONE("下载已经完成", "完成的icon", "点击安装"), STATUS_DOWNLOAD_NEW("新建任务","新的下载任务原创 2013-11-16 00:44:53 · 639 阅读 · 0 评论 -
Code Fragment-打印调用堆栈。
某一个方法可能由于多处调用,可以通过两种方式查看调用信息:Debug调试。打印error的堆栈。Debug的方式可以用来查找always的问题,很方便的定位问题。但是一些random的问题使用打印堆栈更有效,因为实在不清楚这些问题啥时候出现。我们可以使用如下:package com.jue.testmain;public class TestMain { pub原创 2013-09-22 19:39:51 · 1276 阅读 · 0 评论 -
Code Fragment-从不要catch最父类的Exception。
今天看Code的时候,发现有一大段代码catch了Exception,是Exception,而不是它的子类,这是很暴力的处理。什么时候需要去catch异常:RuntimeException: 一般不需要catch,因为他通常是一种编程的错误,是需要修正的。非RuntimeException :需要catch,否则编译不通过。可预期的错误:有一些错误是能够预期到的,故意做的一种补救办法,原创 2013-09-12 21:00:12 · 975 阅读 · 0 评论 -
Code Fragment-使用代码块
本文参考自Android源码,声明代码块,在必要的时候break退出。并继续执行后面的代码。import java.util.Random;public class TestMain { public static void main(String[] args) { // TODO Auto-generated method stub test1(); } pu原创 2013-08-29 23:01:01 · 632 阅读 · 0 评论 -
Code Fragment-避免null的保护不一定是保护
经常遇到这种情况,当遇到一个NullPointException的时候,做一些所谓的保护措施,例如下:public void playVideo(Video video) { player.play(video);}发现player为null,所以产生了NullPointException,有些处理如下:public void playVideo(Video video原创 2013-09-11 21:25:28 · 487 阅读 · 0 评论 -
Code Fragment-避免用户多次快速的点击事件
问题:对于一些用户的按钮,可能需要处理较多的逻辑,用户特别快的连续点击有可能引起一些难以处理的问题。处理:为此,我们可以在某个view在点击之后,设置其不可点击,等到一定时间后再设置为可点击,优点:简单有效android下一个例子:Button button = (Button)findViewById(R.id.myButt原创 2013-09-05 00:22:02 · 1911 阅读 · 0 评论 -
Code Fragment-使用一定的命名说明一种关系。
紧密关系:通过命名的本身的角色加以体现。例如在Launcher中有一种拖拽的模型如下:DragSource:可以提供drag元素的容器。DragObject:被拖拽的元素。DropTarget:可以放置DragObject的目的地。DragListener:拖拽过程中的监听器。这里面通过多个类DragXXX说明了一个紧密的关系,而后面的词语也恰当的说明了这个类的原创 2013-09-09 18:21:46 · 725 阅读 · 0 评论 -
Code Fragment-定义合适的数据结构。
定义合适的数据结构相对算法更高效,应用在项目中的数据结构MessagePool中的 消息队列。LruCache,用来优先记录最近使用的项目。根据需要,还可以定义诸如:经常使用的cache创建负荷最大的cache弱引用的cache本地的cache原创 2013-09-03 23:31:13 · 643 阅读 · 0 评论 -
Code Fragment-通过整齐的格式方便读者代码阅读
本文参考自《编写可读代码的艺术》,这本书写的非常好!有时候,我们可以通过“列对齐"的方式,让代码更易读。实例代码如下:package com.jue.test;public class Student { // 一种有意义的排列顺序 public final static int INDEX_ID = 0; public final static int INDE原创 2013-08-14 00:04:52 · 736 阅读 · 0 评论 -
Code Fragment-复杂的表达式加入解释型变量。
本文参考自《编写可读代码的艺术》,这本书写的非常好!复杂的表达的缺点:可读性太差。阅读时间很久。维护难度大。一个例子:每次读都需要花十几秒。if (request.user.id == document.owner_id) { System.out.println("User can edit this file");} if (request.use原创 2013-08-13 00:27:32 · 558 阅读 · 0 评论 -
Code Fragment-异常情况,返回长度为0的容器好过返回null
异常情况,返回长度为0的容器好过返回null。返回长度为0的容器,后续代码使用容器前,无需判断是否为空。代码更优美避免很多平时不出现,但是可能会出现的NullPointException.不用去时刻记得检查容器是否为空。避免了很多ForceClose。一些错误的场景很难复现。异常情况,直接返回nullpublic static Lis原创 2013-08-11 03:03:42 · 588 阅读 · 0 评论 -
Code Fragment-查询与改动分开
定义:当数据量比较大的时候,我们把数据的查询和处理分开,保持数据操作的整洁,方法功能的确定性。例如:Launcher load和bind数据的时候,可以在load的过程中执行bind,但是在这个时候,数据量比较大,代码写在一起比较混乱复杂。private void loadAndBindWorkspace() { // Load the workspace if原创 2013-07-21 13:48:14 · 587 阅读 · 0 评论 -
Code Fragment- 批量的数据处理放到额外的线程里
这是Launcher的一个例子,在Package改变的时候,通知更新消息。主线程收到事件开启额外线程处理事情处理完回到主线程,更新UI查询的时候,只做查询相关的,修改的时候,只做修改相关的1.当事件发生的时候,onReceive收到if (Intent.ACTION_PACKAGE_CHANGED.equals(action) || Intent原创 2013-07-20 12:00:56 · 707 阅读 · 0 评论 -
Code Fragment-一些工具类的特点
我们的工程中会有很多工具类,工具类通常有如下的特点。工具类的方法大多是静态方法。(使用的过程中,不需要new创建对象)构造方法应该是private的,做到一种强制性的非new创建 ,而是通过类名直接调用。如PackgeUtils.getPackageInforation();方法中需要的变量如Context,是通过参数传入,非属性(因为在静态的方法中,需要静态的属性,静态的属性会引用当原创 2013-07-20 09:58:21 · 758 阅读 · 0 评论 -
Code Fragment-设置自己的Logger工具类
设置自己的Logger工具类可以设定开关,一键开关。可以设置全局的TAG。使用上相对简单一些,Log.i(tag,"正在测试中...");替换成Logger.i("正在测试中...");代码实现例如:package com.com.test;import android.util.Log;public class Logger { public stati原创 2013-07-20 09:42:28 · 581 阅读 · 0 评论 -
Code Fragment-Android在其他线程可以使用方法在UI线程执行UI相关
方法便是activity.runOnUiThreadactivity.runOnUiThread(new Runnable() { public void run() { new AlertDialog.Builder(activity) .setIcon(android.R.drawable.ic_dialog_alert)原创 2013-07-20 09:31:53 · 2095 阅读 · 0 评论 -
Code Fragment-对于一些状态性接口,应该有不同的阶段
对于一些接口,我们应该有一些不同的状态。应该有一些开始性抽象方法,如startXXX。应该有一些结束性的抽象方法,如finishXXX一些特别的事件,应该有一些回调对于不同性质的东西,可以提供不同的bind方法例子:在Launcher里,加载应用程序的信息,提供了如下的接口:public interface Callbacks { public boolea原创 2013-07-20 11:09:51 · 524 阅读 · 0 评论 -
Code Fragment-被回调的方法,通常命名为onXXX
通常以onXXX开头的方法是被回调的主动调用的通常不会用on开头。各种listener,当事件发生的时候会接受到回调。诸如Button.OnClickListener,实现这个接口的,需要实现onClick抽象方法,当发生onClick事件的时候,会被调用。package android.view;public class View {原创 2013-07-20 10:46:23 · 1308 阅读 · 0 评论 -
Code Fragmen-重载的方法,参数少的去调用参数多的。
对于重载的方法,可以使用参数少的去调用参数多的(多出来的参数,使用默认值代替)。代码的重用性,减少了冗余的code单需要改动的时候,只需要改动参数最多的实现,而不是改动每一个方法实现。无论从代码规模还是清晰度,都有很大提高。一个例子:public class CellLayout extends ViewGroup { public CellLayou原创 2013-07-20 10:05:59 · 813 阅读 · 0 评论 -
Code Fragment-不再建议使用的方法,使用注解说明。
一些方法在新的版本有所改动,不再建议使用,可以使用注解说明 ,并提示用户使用新的方法。/** * @deprecated Use {@link #setButton(int, CharSequence, Message)} with * {@link DialogInterface#BUTTON_NEUTRAL}. */@Deprecatedpubli原创 2013-07-20 09:20:13 · 1874 阅读 · 0 评论 -
Code Fragment-使用if return 代替 if else.
使用if判定之后,直接return; 不使用else。修改之前的代码可能如下: static int resolveDialogTheme(Context context, int resid) { if (resid == THEME_TRADITIONAL) { return com.android.internal.R.sty原创 2013-07-20 08:00:10 · 2205 阅读 · 0 评论