Android之开源中国客户端源码分析(一)
程序启动第一个界面类: net.oschina.app.AppStart
功能描述:一张图片
代码细节描述:一个透明度的动画效果,效果动画完成后自动启动新的Activity(Main)
基本BaseActivity类,继承自Activity
功能描述:分别在onCreate方法中添加Activity到栈 ; 在onDestroy方法中移除Activity
代码细节描述: 提供了一个单例类AppManager,把创建的Activity放入到栈中进行管理,提供添加Activity , 移除当前Activity , 移除指定的Activity , 移除所有的Activity ,获得当前的Activity , 退出程序。 这个工具类非常适合与用作开发使用,具体代码如下:
import java.util.Stack; import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context; /**
* 应用程序Activity管理类:用于Activity管理和应用程序退出
* @author liux (http://my.oschina.net/liux)
* @version 1.0
* @created 2012-3-21
*/
public class AppManager { private static Stack<Activity> activityStack;
private static AppManager instance; private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return 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;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
@SuppressWarnings("deprecation")
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) { }
}
}
/**
* @author lee0000
* @version 1
* @time 10月7日
* */ public class FraManager {
private static Stack<Fragment> fragmentStack;
private static FraManager instance;
private static final Object obj = new Object(); private FraManager() {
} /**
* 单一实例
*/
public static FraManager getFraManager() {
if (instance == null) {
synchronized (obj) {
if (instance == null) {
instance = new FraManager();
}
}
}
return instance;
} /**
* 添加Fragment到堆栈
*/
public static void pushFragment(FragmentActivity fact, Fragment fragment, int layoutID, String... title){
if(fragmentStack==null){
fragmentStack=new Stack<Fragment>();
}
fragmentStack.push(fragment);
FragmentTransaction ft = fact.getSupportFragmentManager().beginTransaction(); ft.replace(layoutID, fragment);
if (fragmentStack.size() > 1) {
ft.addToBackStack(null);
}
ft.commit();
} /**
* 弹出Fragment
*/
public static Fragment popFragment(FragmentActivity fact) {
Fragment fragment = fragmentStack.pop();
FragmentTransaction ft = fact.getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
return fragment;
} /***
* 弹出指定Activity中所有的fragment
* */
public static void finishFragment(FragmentActivity fact){
for (int i = 0, size = fragmentStack.size(); i < size; i++){
Fragment stackFragment = fragmentStack.get(i);
if (null != stackFragment){
Fragment fragment = stackFragment;
if (fact == fragment.getActivity()) {
FragmentTransaction ft = fragment.getFragmentManager().beginTransaction();
ft.remove(fragment);
fragmentStack.remove(i);
ft.commit();
}
}
}
} /**
* 清除栈中所有的项
* */
public static void clearStack(){
if (fragmentStack != null && fragmentStack.isEmpty()) {
fragmentStack.clear();
}
}
}
Android之开源中国客户端源码分析(一)的更多相关文章
- Android之开源中国客户端源码分析(二)
1. 加载动画圈实现 <ProgressBar android:id="@+id/main_head_progress" style="@style/loading ...
- android 在线升级借助开源中国App源码
android 在线升级借助开源中国App源码 http://www.cnblogs.com/luomingui/p/3949429.html android 在线升级借助开源中国App源码分析如下: ...
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- Eureka 系列(04)客户端源码分析
Eureka 系列(04)客户端源码分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 在上一篇 Eureka 系列(01)最简使用姿态 中对 Eureka 的简单用法做 ...
- 开源MyBatisGenerator组件源码分析
开源MyBatisGenerator组件源码分析 看源码前,先了解Generator能做什么? MyBatisGenerator是用来生成mybatis的Mapper接口和xml文件的工具,提供多种启 ...
- TeamTalk源码分析(十一) —— pc客户端源码分析
--写在前面的话 在要不要写这篇文章的纠结中挣扎了好久,就我个人而已,我接触windows编程,已经六七个年头了,尤其是在我读研的三年内,基本心思都是花在学习和研究windows程序上 ...
- 【Android】Handler、Looper源码分析
一.前言 源码分析使用的版本是 4.4.2_r1. Handler和Looper的入门知识以及讲解可以参考我的另外一篇博客:Android Handler机制 简单而言:Handler和Looper是 ...
- MQTT再学习 -- MQTT 客户端源码分析
MQTT 源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇. 参看:逍遥子_mosquitto源码分析系列 参看:MQTT libmosquitto源码分析 参看:Mosquitto学习笔记 ...
- Android View事件分发-从源码分析
View事件分发-从源码分析 学习自 <Android开发艺术探索> https://blog.csdn.net/qian520ao/article/details/78555397?lo ...
随机推荐
- mysql 忽略库同步的坑
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错. 如在Master(主)服务器上设置 replicate_do_db=test(my.conf ...
- Web层的Controller代码逻辑
需要做的功能: 1.数据的校验. 为什么不在后面的Service层校验呢? 原因:Service是通用的,而调用方Controller有多个,每一个Controller代表一个业务,这些业务需要校验的 ...
- ref:关于JAVA中一些安全漏洞示例说明及如何规避方法代码示例总结分享
ref:http://www.xwood.net/_site_domain_/_root/5870/5874/t_c268166.html 标签:安全,漏洞,健壮,java,SQL注入,SS及CSRF ...
- [HDU - 5408] CRB and Farm
题意: 给出一个由n个点组成的凸包,以及凸包内的k个点,问是否能够在凸包上选择最多2k个点构造一个新的 凸包,使得新的凸包覆盖原来的k个点. 要求2k个点覆盖原本的k个点,只要对原k个点构造凸包,然后 ...
- Python时间日期格式化之time与datetime模块总结
1 引言 在实际开发过程中,我们经常会用到日期或者时间,那么在Python中我们怎么获取时间,以及如何将时间转换为我们需要的格式呢?在之前的开发中,也曾遇到time.datetime等模块下的不同函数 ...
- iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面
iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...
- 验证码60s倒计时前端效果
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- loj#2718. 「NOI2018」归程
题目链接 loj#2718. 「NOI2018」归程 题解 按照高度做克鲁斯卡尔重构树 那么对于询问倍增找到当前点能到达的高度最小可行点,该点的子树就是能到达的联通快,维护子树中到1节点的最短距离 s ...
- NOIP差不多可以退役的退役记录
好吧,现在既然苟回来了,就来回忆一下我NOIP2017的黑历史吧. Day-1: 原本以为是很平静的一天,上午学考机房强行断网,原因是腾出网速给对面学考的同学们查资料用.好吧没法刷题我只能选择颓废…… ...
- mysqlslap 一个MySQL数据库压力测试工具
在Xen/KVM虚拟化中,一般来说CPU.内存.网络I/O的虚拟化效率都非常高了,而磁盘I/O虚拟化效率较低,从而磁盘可能会是瓶颈.一般来说,数据库对磁盘I/O要求比较高的应用,可以衡量一下在客户机中 ...