网上有很多介绍BaseActivity的博文,多数是从应用的角度去描述的。

这里,我所介绍的BaseActivity不同,主要从框架搭建的角度去介绍BaseActivity的使用。

先看代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * 应用程序Activity的基类
 
 * @author kymjs
 * @version 1.0
 * @created 2013-11-24
 */
public abstract class BaseActivity extends Activity implements
        OnClickListener {
    private static final int ACTIVITY_RESUME = 0;
    private static final int ACTIVITY_STOP = 1;
    private static final int ACTIVITY_PAUSE = 2;
    private static final int ACTIVITY_DESTROY = 3;
    public int activityState;
    // 是否允许全屏
    private boolean mAllowFullScreen = true;
    public abstract void initWidget();
    public abstract void widgetClick(View v);
    public void setAllowFullScreen(boolean allowFullScreen) {
        this.mAllowFullScreen = allowFullScreen;
    }
    @Override
    public void onClick(View v) {
        widgetClick(v);
    }
    /***************************************************************************
     
     * 打印Activity生命周期
     
     ***************************************************************************/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppLog.debug(this.getClass() + "---------onCreat ");
        // 竖屏锁定
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        if (mAllowFullScreen) {
            requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消标题
        }
        AppManager.getAppManager().addActivity(this);
        initWidget();
    }
    @Override
    protected void onStart() {
        super.onStart();
        AppLog.state(this.getClass(), "---------onStart ");
    }
    @Override
    protected void onResume() {
        super.onResume();
        activityState = ACTIVITY_RESUME;
        AppLog.state(this.getClass(), "---------onResume ");
    }
    @Override
    protected void onStop() {
        super.onResume();
        activityState = ACTIVITY_STOP;
        AppLog.state(this.getClass(), "---------onStop ");
    }
    @Override
    protected void onPause() {
        super.onPause();
        activityState = ACTIVITY_PAUSE;
        AppLog.state(this.getClass(), "---------onPause ");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        AppLog.state(this.getClass(), "---------onRestart ");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        activityState = ACTIVITY_DESTROY;
        AppLog.state(this.getClass(), "---------onDestroy ");
        AppManager.getAppManager().finishActivity(this);
    }
}

定义一个初始化Activity控件的抽象方法initWidget();

像findviewbyid()这类代码就可以写在这里,不会影响代码结构了。这里需要提一点的是:setContent()方法一定要写在initWidget()里,而不能再写到oncreate里面了,看代码可以知道,initwidget方法是存在于super()中的,而如果再写到oncreate里,就相当于先调用了findview再去调用setcontent,这样肯定会报空指针异常。

关于竖屏锁定,这个可以按需要添加,没什么说的。

还有一个要说的就是requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消标题

对于这段代码,如果你要使用系统的ActionBar的时候,一点要记得调用setAllowFullScreen,设置为false,否则BaseActivity自动取消了ActionBar你又去使用,肯定也会出异常。

还有一点:Baseactivity已经实现了OnClickListener,所以子类无需再次实现,控件可以直接在initWidget里面setonclicklistener(this);然后在widgetClick(View v)中设置监听事件即可。

有关AppManager的内容我将放到下一篇《android应用框架搭建》去讲解,这里大家可以先忽略。

有关生命周期的打印,我认为在调试阶段还是有必要的,毕竟看着每一个Activity的生命周期,如果出了问题马上就可以清楚的知道是哪里出了问题。

转载于:https://www.cnblogs.com/ymczxy/p/4725715.html

android应用框架搭建之BaseActivity相关推荐

  1. Android MVVM框架搭建(十)Hilt、ViewBinding、Activity Result API

    Android MVVM框架搭建(十)Hilt.ViewBinding.Activity Result API 前言 正文 一.依赖 二.Hilt使用 1. Hilt 应用类 2. ViewModel ...

  2. Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取

    Android MVVM框架搭建(七)Permission.AlertDialog.拍照和相册选取 前言 正文 一.数据库升级 二.数据操作 二.自定义Dialog ① DialogViewHelpe ...

  3. Android MVVM框架搭建(九)TabLayout、ViewPager、城市地图天气切换

    Android MVVM框架搭建(九)TabLayout.ViewPager.城市地图切换 前言 正文 一.父Fragment加载子Fragment ① Fragment适配器 ② TabLayout ...

  4. Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog

    Android MVVM框架搭建(八)高德地图定位.天气查询.BottomSheetDialog 前言 正文 一.集成SDK 二.基础配置 ① 权限配置 ② 配置Key 三.显示地图 ① MapFra ...

  5. Android MVVM框架搭建(三)MMKV + Room + RxJava2

    Android MVVM框架搭建(三)MMKV + Room + RxJava2 前言 正文 一.添加依赖 二.MMKV 1. 初始化 2. 数据存取 3. 使用 三.Room 1. @Entity ...

  6. Android MVVM框架搭建(二)OKHttp + Retrofit + RxJava

    Android MVVM框架搭建(二)Retrofit + RxJava 前言 正文 一.引入依赖 二.工具类 三.构建网络框架 1. Base 2. 异常处理 3. 拦截器 4. 网络请求服务 四. ...

  7. Android MVP框架搭建

    1. 自定义全局配置文件 创建全局自定义配置文件 config.gradle,拆分配置,便于依赖引用管理: 全局 build.gradle 引入自定义配置文件 2. 创建common module, ...

  8. android mvvm框架搭建_轻松搭建基于JetPack组件的MVVM框架

    原文链接:轻松搭建基于JetPack组件的MVVM框架 - 掘金 Brick github gitee 介绍 辅助android开发者搭建基于JetPack组件构建MVVM框架的注解处理框架.通过注解 ...

  9. Android最好用的项目框架搭建

    本篇先记录下当前项目中涉及的主要技术要点.也算是对所作项目的一次总结.如果这个过程能对你有些许的帮助,那可能就显得有意义点了. 一个完整的Android项目会涉及后台和前端.我们只关注于前端,也就是我 ...

最新文章

  1. python软件使用教程-python用什么软件编写
  2. Android分享-微信、Facebook、Google
  3. 美国司法部将对大型科技公司展开广泛、新的反垄断审查
  4. 基于Docker部署Nginx
  5. fluorinefx (AMF3 for .NET)
  6. 调用微信和支付宝调三方接口扫描二维码?
  7. 关于安卓手机访问一些网站或者Fiori应用弹出安装证书的提示
  8. LeetCode--palindrome-number回文数
  9. Rainmeter后续——WIN10任务栏透明以及设置开机启动应用
  10. textarea还剩余字数统计
  11. [SAP ABAP开发技术总结]ABAP调优——代码优化
  12. angular dynamic component 笔记
  13. 兼容性测试中如何切换和管理多个JDK版本
  14. 安装element ui
  15. JavaWeb项目上云教程(Java项目在腾讯云上部署操作教程)
  16. linux开机故障,Entering emeryency mode. Exit the shell to continue.
  17. Python下载库pip pygame
  18. 互联网研发团队-岗位职责
  19. 百度网盘网页端视频倍速方法
  20. 高粱副产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. [BZOJ1087][SCOI2005]互不侵犯King
  2. c语言实参形参函数调用指针引用 符号实例,C语言实参、形参、函数调用、指针、引用、符号实例.doc...
  3. oracle 提示i386,新手请教:RAC安装时检测i386软件包未安装,这个怎么处理?
  4. 怎么用python写数据库_如何使用python对数据库(mysql)进行操作
  5. cad抛物线曲线lisp_曲线的转弯半径和曲率 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  6. QML 编程之旅 -- QML程序的基本结构概念
  7. 多线程存数据mysql_java 多线程存储数据库
  8. python 求两条曲线的交点_这几种问法都是考察张角问题,高考数学圆锥曲线的焦点弦张角定理...
  9. 2017年10月07日普及组 数列
  10. 拼数pascal程序