/*
* 1.关于编程风格:每一位程序猿可能都有自己独特的编程风格,但是有些规则是大家都必须遵守的,特别
* 是在工作的过程中,良好的代码风格能大大提高代码本身的可阅读性和维护性,也更有利于别人修改你
* 的代码。风格问题涉及到的都是细节相关的问题,读者朋友们或许都听过“细节决定成败”这句话,这句话
* 在这里同样生效,不过是换了种意思,就是“细节体现你的专业程度”,所以作为一名程序猿,我们应该从
* 编写代码的训练中养成良好的编码习惯,如命名规范,排版规范,写好注释等。下面具体说明下:
*/
/*
* 1)整个Project相关内容的目录规范:(通常可以包含以下几个文件夹)
* #.Requirement Doc: project的需求文档说明
* #.Design:有关设计方面的说明
* #.Planning&Log:计划、日志、会议等
* #.Test:测试及其报告
* #.Study:学习资料及demo
* #.Deployment:发布,部署
* #.src: 源代码
* #.help:帮助文档
* #. ...(根据自己需求添加合适文档)
* 注意事项:在IDE建立project的时候,包即目录(java),包名全小写,且一般不超过3层,命名为:【公司】.【项目】.【模块】
*/
/*
* 2)命名规范:
* #、Pascal命名法:每个单词首字母大写,其余小写,如“ActivityDemo”,主要应用于:文件名,普通类名,构造函数等
* #、Camel命名法:第一个单词全小写,其余单词按pascal命名,如“myName”,主要应用于:方法名(动宾短语),普通函数名等
* #、匈牙利命名法(使用前缀,后缀命名):如对于整型变量,可以“int intMyAge;”
* #、下划线命名法:主要在常量(全大写)中使用,分隔两个不同单词
* 其他常见命名:私有成员变量:“mMyName”;静态变量:“sMyName”;方法参数:“pMyName”;
* 当然命名规则的使用主要看已有项目的要求,若新启动一个项目,编码前团队必须先统一命名规范
*/
/*
* 3)其他需要注意的地方:
* 1、一个方法不超过35行代码
* 2、不要去修改机器自动生成的代码
* 3、final String取代String,即不要直接写字符串
* 4、循环语句中不用return
* 5、属性用set(),get()方法操控
* 6、不要再系统生成函数中写复杂代码,复杂代码通常用函数调用解决
* 7、虽然class能搞定一切,但使用接口暴露信息会更好
* 8、switch语句中无论如何都要有default
* 9、同类的import包放在一起
* ...
*
*/
//下面看一下Android源码中的代码:
/*
* Copyright (C) 2006 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app;
import com.android.internal.app.ActionBarImpl;
import com.android.internal.policy.PolicyManager;
import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.method.TextKeyListener;
import android.util.AttributeSet;
import android.util.EventLog;
/**可在注释中嵌入HTML标签,在生成javadoc的时候控制各种属性等
* An activity is a single, focused thing that the user can do. Almost all
* activities interact with the user, so the Activity class takes care of
* creating a window for you in which you can place your UI with
* {@link #setContentView}. While activities are often presented to the user
* as full-screen windows, they can also be used in other ways: as floating
* windows (via a theme with {@link android.R.attr#windowIsFloating} set)
* or embedded inside of another activity (using {@link ActivityGroup}).
*
* There are two methods almost all subclasses of Activity will implement:
*
* <ul>
* <li> {@link #onCreate} is where you initialize your activity. Most
* importantly, here you will usually call {@link #setContentView(int)}
* with a layout resource defining your UI, and using {@link #findViewById}
* to retrieve the widgets in that UI that you need to interact with
* programmatically.
*
* <li> {@link #onPause} is where you deal with the user leaving your
* activity. Most importantly, any changes made by the user should at this
* point be committed (usually to the
* {@link android.content.ContentProvider} holding the data).
* </ul>
...
*/
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2 {
private static final String TAG = "Activity";
private static final boolean DEBUG_LIFECYCLE = false;
/** Standard activity result: operation canceled. */
//常量命名
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;
static final String FRAGMENTS_TAG = "android:fragments";
private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState";
private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds";
private static final String SAVED_DIALOGS_TAG = "android:savedDialogs";
private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_";
private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_";
private static class ManagedDialog {
Dialog mDialog;
Bundle mArgs;
}
private SparseArray<ManagedDialog> mManagedDialogs;
// set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called.
//私有变量命名
private Instrumentation mInstrumentation;
private IBinder mToken;
private int mIdent;
static final class NonConfigurationInstances {
Object activity;
HashMap<String, Object> children;
ArrayList<Fragment> fragments;
HashMap<String, LoaderManagerImpl> loaders;
}
/* package */ NonConfigurationInstances mLastNonConfigurationInstances;
private Window mWindow;
/**
* Change the intent returned by {@link #getIntent}. This holds a
* reference to the given intent; it does not copy it. Often used in
* conjunction with {@link #onNewIntent}.
*
* @param newIntent The new Intent object to return from getIntent
*
* @see #getIntent
* @see #onNewIntent
*自定义javadoc标签
*@author ..
*@date ..
*@modify ..(who,when..)
*/
public void setIntent(Intent newIntent) {
mIntent = newIntent;
}