android完全退出以及RxBinding研读
来源:互联网 发布:淘宝买手机怎么看真假 编辑:程序博客网 时间:2024/05/22 20:34
RxBinding用来处理安卓UI响应,沿用了RxJava(android)的风格,可以切换线程和变形,让代码可读性提高。上代码:
1、RxActivity
package com.example.test.activity;import android.widget.Button;import android.widget.CheckBox;import android.widget.Toast;import com.example.test.R;import com.jakewharton.rxbinding.view.RxView;import com.jakewharton.rxbinding.widget.RxCompoundButton;import java.util.concurrent.TimeUnit;import rx.functions.Action1;/** * @authore WinterFellSo 2017/3/22 * @purpose Rx系列库,RxJava(Android)、RxBingding */public class RxActivity extends BaseActivity { private Button throttleFirst; private Button showColor; private CheckBox checkBoxChange; @Override protected int getContentLayout() { return R.layout.activity_rx; } @Override protected void initGui() { throttleFirst = (Button) findViewById(R.id.throttleFirst); showColor = (Button) findViewById(R.id.showColor); checkBoxChange = (CheckBox) findViewById(R.id.checkBoxChange); } @Override protected void initAction() { //两秒钟之内只取一个点击事件,防抖操作 RxView.clicks(throttleFirst) .throttleFirst(2, TimeUnit.SECONDS) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Toast.makeText(RxActivity.this, "点击", Toast.LENGTH_SHORT).show(); } }); //监听长按时间 RxView.longClicks(throttleFirst) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Toast.makeText(RxActivity.this, "长按", Toast.LENGTH_SHORT).show(); } }); //复选框监听 RxCompoundButton.checkedChanges(checkBoxChange) .subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { showColor.setEnabled(aBoolean); showColor.setBackgroundResource(aBoolean ? android.R.color.holo_red_light : android.R.color.holo_blue_bright); } }); } @Override protected void initData() { }}
subscribe方法(RxJava具有的)就是订阅(RxJava用到的是观察者模式,被观察者与观察者通过订阅来建立联系),当建立联系的时候会自动调用call方法
2、BaseActivitypackage com.example.test.activity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Window;import android.widget.ListView;import com.example.test.R;import com.example.test.application.BaseApplication;import com.example.test.data.ActivityTack;import com.example.test.data.DataCenter;/** * @authore WiActivitynterFellSo 2017/3/22 * @purpose 基础 */public abstract class BaseActivity extends Activity{ protected Activity ctx; protected BaseApplication app; private long lastClickTime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); // 取消标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置全屏 // window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, // WindowManager.LayoutParams.FLAG_FULLSCREEN); // 高亮 // window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 添加到activity stack管理集合 ActivityTack.getInstanse().addActivity(this); ctx = this; app = (BaseApplication) getApplication(); app.setContext(ctx); if (getContentLayout() != 0) { setContentView(getContentLayout()); } initGui(); initAction(); initData(); } /** * * @Title: isFastDoubleClick * @Description: 判断事件出发时间间隔是否超过预定值 * @param @return * @return boolean * @throws */ public boolean isFastDoubleClick() { long time = System.currentTimeMillis(); long timeD = time - lastClickTime; if (0 < timeD && timeD < 1000) { return true; } lastClickTime = time; return false; } public void startActivity(Intent intent) { // 防止连续点击 if (isFastDoubleClick()) { return; } super.startActivity(intent); } protected abstract int getContentLayout(); protected abstract void initGui(); protected abstract void initAction(); protected abstract void initData(); //完全退出 public void exit(){ ActivityTack.getInstanse().exit(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { ActivityTack.getInstanse().removeActivity(this); super.onDestroy(); } @Override public void onResume() { super.onResume(); }}
每个Activity都会集成虚类BaseActivity;每个activity创建时候,都会加入到一个全局列表当中。android完全退出:
第一种,退出时候,线性表清空且每个activity都会调用finish();
第二种:清空线性表,且杀进程
// 结束进程android.os.Process.killProcess(android.os.Process.myPid());System.exit(0);
3、ActivityTack
package com.example.test.data;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import android.app.Activity;import com.example.test.activity.BaseActivity;public class ActivityTack {public List<Activity> activityList = new ArrayList<Activity>();public static ActivityTack tack = new ActivityTack();public static ActivityTack getInstanse() {return tack;}private ActivityTack() {}public BaseActivity getBaseActivity() {if (activityList != null && activityList.size() > 0) {return (BaseActivity) activityList.get(activityList.size() - 1);}return null;}public void addActivity(Activity activity) {activityList.add(activity);}public void removeActivity(Activity activity) {if (activity != null) {activityList.remove(activity);activity.finish();activity = null;}}public void removeAllActivity() {while (activityList.size() > 0) {popActivity(activityList.get(activityList.size() - 1));}}/** * 完全退出 * * @param context */public void exit() {while (activityList.size() > 0) {popActivity(activityList.get(activityList.size() - 1));}// 结束进程android.os.Process.killProcess(android.os.Process.myPid());System.exit(0);}/** * 根据class name获取activity * * @param name * @return */public Activity getActivityByClassName(String name) {for (Activity ac : activityList) {if (ac.getClass().getName().indexOf(name) >= 0) {return ac;}}return null;}public Activity getActivityByClass(Class cs) {for (Activity ac : activityList) {if (ac.getClass().equals(cs)) {return ac;}}return null;}/** * 弹出activity * * @param activity */public void popActivity(Activity activity) {removeActivity(activity);activity.finish();activity = null;}/** * 弹出activity到 * * @param cs */@SuppressWarnings("rawtypes")public void popUntilActivity(Class... cs) {List<Activity> list = new ArrayList<Activity>();for (int i = activityList.size() - 1; i >= 0; i--) {Activity ac = activityList.get(i);boolean isTop = false;for (int j = 0; j < cs.length; j++) {if (ac.getClass().equals(cs[j])) {isTop = true;break;}}if (!isTop) {list.add(ac);} elsebreak;}for (Iterator<Activity> iterator = list.iterator(); iterator.hasNext();) {Activity activity = iterator.next();popActivity(activity);}}}如果要读懂RxBinding,应该先去了解RxJava,推荐可以看这篇博客文(需要有点耐心)
点击打开链接
RxBinding的git地址(android studio引入库)
点击打开链接
RxJava&RxJava Android&RxBinding所有类库,可以从下面地址下载
点击打开链接
0 0
- android完全退出以及RxBinding研读
- Android退出应用程序,完全退出!
- android 完全退出程序
- Android完全退出应用程序
- android 完全退出程序
- Android完全退出应用程序
- android 完全退出应用程序
- android 完全退出应用程序
- android完全退出程序
- android 完全退出应用程序
- Android完全退出应用程序
- Android完全退出应用程序
- Android完全退出应用程序
- android完全退出程序
- android完全退出程序
- Android完全退出应用程序 .
- android完全退出应用程序
- android 完全退出
- 欢迎使用CSDN-markdown编辑器
- linux管道
- rxjava2的Flowable使用方法
- window下使用ant编译android应用
- iOS main函数(学习笔记)
- android完全退出以及RxBinding研读
- 微博刷关注
- 清除浮动的理解
- IEEE802.11协议栈
- Android 实时曲线图/折线图
- Windows7下CVS Control panel无法启动问题
- SCNN-用于时序动作定位的多阶段3D卷积网络
- c#各进制的转换
- mybatis 关联查询