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<Activity> 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<Activity> copyStack(){
    Stack<Activity> 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<? extends Activity> 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);
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值