RxAndroid+Retrofit+GreenDao+MVP框架---通用基类封装(一)

打算分为通用的方法,基类封装;网络请求框架封装(RxAndroid+Retrofit);

查看完整框架可以到GitHub下载https://github.com/850125665/WeatherApp

维护activity栈

  • 有些需求需要一键退出应用功能,或者跳转到多个activity后,想一键返回到主activity

相关代码ActivityStack.java,注释应该还可以

public class ActivityStack {

private static ActivityStack activityStack;
/**
 * 存储每个activity的栈
 */
private Stack stack;

private ActivityStack(){
    stack = new Stack<>();
}

public static ActivityStack getInstanct(){
    if(activityStack==null){
        activityStack = new ActivityStack();
    }
    return activityStack;
}

public void add(Activity activity){
    if(activity!=null){
        stack.add(activity);
    }
}

public void remove(Activity activity){
    if(activity!=null){
        stack.remove(activity);
    }
}

public Stack copyStack(){
    Stack stackCopy = new Stack<>();
    if(stack!=null){
        stackCopy.addAll(stack);
    }
    return stackCopy;
}

public void finishAll(){
    Activity[] activities = new Activity[stack.size()];
    stack.copyInto(activities);
    for (Activity activity: activities){
        activity.finish();
    }
    stack.clear();
}

/**
 * 根据activity来保存
 * @param exceptActivity
 */
public void finishAllActivityExcept(Activity exceptActivity){
    boolean isExist = false;
    Activity[] activities = new Activity[stack.size()];
    for (Activity activity: activities){
        if(activity==exceptActivity){
            isExist = true;
        }else {
            activity.finish();
        }
    }
    stack.clear();
    if(isExist){
        stack.add(exceptActivity);
    }
}

/**
 * 根据类名留存
 * @param exceptClass
 */
public void finishAllActivityExceptClass(Class exceptClass){
    Activity exceptActivity = null;
    Activity[] activities = new Activity[stack.size()];
    stack.copyInto(activities);
    for (Activity activity : activities){
        if(activity.getClass()==exceptClass){
            exceptActivity = activity;
        }else {
            activity.finish();
        }
    }
    stack.clear();
    if(exceptActivity!=null){
        stack.add(exceptActivity);
    }
}

public Activity getTopActivity(){
    return stack.lastElement();
}

public int getActivitySize(){
    return stack.size();
}

}

BaseActivity封装

  • 封装了loadingDialog,activity跳转bundle参数获取与保存,添加到任务栈,后台检测等常用方法

BaseActivity.java,注释应该还可以

package edu.xtu.androidbase.weaher.ui.base;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.trello.rxlifecycle.components.support.RxAppCompatActivity;

import edu.xtu.androidbase.weaher.util.AppInfo;
import edu.xtu.androidbase.weaher.util.AppMethods;
import edu.xtu.androidbase.weaher.util.LogUtils;

/**
* Created by huilin on 2016/8/14.
*/
public class BaseActivity extends RxAppCompatActivity{

public String TAG = this.getClass().getName();
public Context mContext;

public Dialog loadingDialog;
/**
 * activity传数据需要传参的key值
 */
public static String BUNDLE_DATA = "bundle_data";
/**
 * 传来的数据
 */
public Bundle data=null;

/**
 * 检查程序是否在后台运行
 */
private Runnable checkBackRunning = new Runnable() {
    @Override
    public void run() {
        if(!AppMethods.isAppOnForceGround(BaseActivity.this)){
            AppInfo.getAppInstant().setBackground(false);
        }
    }
};

/**
 * 保存crash时的数据
 */
public String SAVE_INSTANCE = "saveInstance";
/**
 * 初始化只能在使用activity上下文方法
 * @param savedInstanceState
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState!=null){
        data = savedInstanceState.getBundle(SAVE_INSTANCE);
    }
    loadingDialog=AppMethods.createLoadingDialog(this);
    LogUtils.v(TAG,"onCreate");
    this.mContext=this;
    AppInfo.getAppInstant().initScreenInfo(this);
    ActivityStack.getInstanct().add(this);
    processExtraData();

}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    LogUtils.v(TAG,"onNewIntent");
    //把最新的intent放进去
    setIntent(intent);
    processExtraData();
}

/**
 * 解析传来的数据 传来的数据必须是bundle
 */
private void processExtraData() {
    Intent intent = getIntent();
    if(intent!=null && intent.getBundleExtra(BUNDLE_DATA)!=null){
        data = intent.getBundleExtra(BUNDLE_DATA);
        receptIntent(data);
    }
}
/**
 * 有从别的activity的参数
 */
public void receptIntent(Bundle bundle){

}

@Override
protected void onStart() {
    super.onStart();
    LogUtils.v(TAG,"onStart");
    AppInfo.getAppInstant().getUiHandler().removeCallbacks(checkBackRunning);
    AppInfo.getAppInstant().setBackground(true);
}

@Override
protected void onResume() {
    super.onResume();
    LogUtils.v(TAG,"onResume");
}

@Override
protected void onPause() {
    super.onPause();
    LogUtils.v(TAG,"onPause");
}

@Override
protected void onStop() {
    super.onStop();
    LogUtils.v(TAG,"onStop");
    //3秒去查看是否在后台
    AppInfo.getAppInstant().getUiHandler().postDelayed(checkBackRunning,3000);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    LogUtils.v(TAG,"onSaveInstanceState");
    if(data!=null){
        outState.putBundle(SAVE_INSTANCE,data);
    }
    super.onSaveInstanceState(outState);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    LogUtils.v(TAG,"onDestroy");
    ActivityStack.getInstanct().remove(this);
}

/**
 * 加载加载圆圈
 */
public void showLoadingDialog(){
    AppMethods.showDialog(mContext,loadingDialog);
}

/**
 * 取消加载圆圈
 */
public void dismissLoadingDialog(){
    AppMethods.dismissDialog(mContext,loadingDialog);
}
}

你可能感兴趣的:(android)