Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Android][开源中国客户端]学习1--Start #6

Open
fred-ye opened this issue May 9, 2014 · 0 comments
Open

[Android][开源中国客户端]学习1--Start #6

fred-ye opened this issue May 9, 2014 · 0 comments

Comments

@fred-ye
Copy link
Owner

fred-ye commented May 9, 2014

今天决定开始好好研究几个开源的项目。之前朋友推荐过开源中国的客户端写得还不错,代码量不大,结构也很清晰。源码可以直接下载下来,于是决定好好看一下。首先看其net.oschina.app包的结构。
image

  • AppStart.java是程序的入口,用来启动界面的动画,同时负责跳转到主Activity中,即net.oschina.app.ui包下面的Main.java类中。
  • AppManager 是用来对整个应用程序的Activity进行管理。此处有几点需要记录一下:
    • 该类采用单例模式进行实现。此类中的单例模式其实不太严密,但对于手机应用,这样实现完全可以满足要求。关于单例模式的实现可以参看我的另一篇文章[Design-Pattern]-Singleton
    • 除了保留自身的一个引用外private static AppManager instance;(为了单例模式的实现),该类只有一个成员变量即一个Activity 栈。即private static Stack<Activity> activityStack;
    • 类中提供了多个对整个应用程序的Activity进行管理的方法,如添加Activity,移除Activity,退出应用程序等。如:
//添加Activity到堆栈  
public void addActivity(Activity activity) {
    if (activityStack == null) {
        activityStack = new Stack<Activity>();
    }
    activityStack.add(activity);
}

//结束当前Activity(堆栈中最后一个压入的) 
public void finishActivity() {
    Activity activity = activityStack.lastElement();
    finishActivity(activity);
}

//结束指定的Activity
public void finishActivity(Activity activity) {
    if (activity != null) {
        activityStack.remove(activity);
        activity.finish();
        activity = null;
    }
}
// 退出应用程序
public void AppExit(Context context) {
    try {
        finishAllActivity();
        ActivityManager activityMgr = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        activityMgr.restartPackage(context.getPackageName());
        System.exit(0);
    } catch (Exception e) {
    }
}
  • AppConfig中定义了一些应用相关的配置信息,这些信息最终都会写到properties文件中。
  • AppContext中用来放应用程序的上下文信息,用来存储全局的配置。并提供了从网络上获取应用所需要的信息的业务相关的方法。如getUserBlogListgetBlogListgetPostList等多种方法。
  • AppException 应用程序的异常类,用来捕获异常并提示错误信息。主要是访问网络和IO相关操作的异常。包括将异常信息存储到文件,发送异常报告到服务器,弹出友好的出错提示等方法。该异常类实现了Thread.UncaughtExceptionHandler接口。关于Thread.UncaughtExceptionHandler接口的使用,请参看:[Android]异常的捕获 Thread.UncaughtExceptionHandler
@fred-ye fred-ye changed the title [Android][开源中国客户端]学习1 [Android][开源中国客户端]学习1--Start May 10, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant