设为首页 加入收藏

TOP

程序结构设计理论(Android)(一)
2019-09-26 11:11:59 】 浏览:270
Tags:程序 结构设计 理论 Android

程序结构设计理论(Android)

作者:邓能财

2019年9月24日

个人简介

姓名:邓能财
年龄:26
毕业学校:东华理工大学
院系:理学院
专业:信息与计算科学
邮箱:2420987186@qq.com

[明德厚学,爱国荣校]

本文的PPT版、以及作为案例的App项目可以从这里下载:程序结构设计理论(Android)20190924.zip
或者
链接:百度网盘-程序结构设计理论(Android)_20190926.zip
提取码:jmu5

目录

一、android程序中,对界面的访问与更新
二、Activity访问Service,Service更新Activity
三、查找的简化
四、数据体、单纯计算
五、阅读信息量优化
六、功能模块的硬件层与软件层,输入、事件与动机
七、双向绑定与即时更新
八、内部结构与外部关系的架构模式
九、数据与单纯计算所在模块、数据流
十、作为例子的App

一、android程序中,对界面的访问与更新

1.android app的界面是树结构

[如图-app用户界面的树结构]

在android程序中访问界面,即,在树的一个节点访问其他节点。

2.在Activity中某个View访问其他View
HhhViewGroup hhhViewGroup = ((Activity)getContext()).findViewById(R.id.hhh);

或者

ViewGroup rootView = (ViewGroup)((ViewGroup)((Activity)getContext()).findViewById(android.R.id.content)).getChildAt(0);
HhhViewGroup hhhViewGroup = (HhhViewGroup)FindViewUtil.find(rootView, child -> child instanceof HhhViewGroup);
3.在某个Activity中访问其他Activity
BbbActivity bbbActivity = CollectionUtil.find(((App)getApplication()).getActivityList(), item -> item instanceof BbbActivity);

其中(App)getApplication()).getActivityList()需要实现一个Activity列表,可以用ActivityLifecycleCallbacks实现;

4.LllEditText的文本改变时,更新KkkViewGroup的方法
lllEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable text) {
            // 处理text
        }
    });

处理text:

CccActivity cccActivity = ((CccActivity)lllEditText.getContext());
FffFragment fffFragment = (FffFragment)CollectionUtil.find(cccActivity.getFragmentManager().getFragments(), item -> item instanceof FffFragment);
KkkViewGroup kkkViewGroup = (KkkViewGroup)fffFragment.getView().findViewById(R.id.kkk);

或者

KkkViewGroup kkkViewGroup = (KkkViewGroup)FindViewUtil.find(fffFragment.getView(), child -> child instanceof KkkViewGroup);
kkkViewGroup.refresh(text.toString());
5.监听器的设置不外传

由于任何子View或者Fragment都可以访问任何其他节点,因此类似下面的代码是不应该存在的:
假设CccActivity包含FffFragment,FffFragment包含kkkViewGroup;

public class FffFragment {
    public void setXxxOnClickListener(XxxOnClickListener xxxOnClickListener) {
        kkkViewGroup.setXxxOnClickListener(xxxOnClickListener);
    }
}

然后在CccActivity内执行:

fffFragment.setXxxOnClickListener(() -> {CccActivity.this.doThing(); });

应该这样实现:

kkkViewGroup.setXxxOnClickListener(() -> {((CccActivity)kkkViewGroup.getContext()).doThing(); });

二、Activity访问Service,Service更新Activity

1.Activity访问Service

方法一、bindService()
方法二、维护Service列表
在App中定义ArrayList mServiceList变量,在XxxService的onCreate()中mServiceList.add(this),在onDestroy()中mServiceList.remove(this);

XxxService xxxService = CollectionUtil.find(((App)getApplication()).getServiceList(), item -> item instanceof XxxService);
2.在Service中更新Activity
BbbActivity bbbActivity = CollectionUtil.find(((App)getApplication()).getActivityList(), item -> item instanceof BbbActivity);
bbbActivity.refresh(data);

三、查找的简化

for(Ttt item : list) {
    if (item...) {
        doThing(item);
        break;
    }
}

可简化为:

Ttt item = CollectionUtil.find(list, item...);
doThing(item);

find的实现:

public class CollectionUtil {

    public static <T> T find(Collection<T> list, Filter<T> filter) {
        for(T object : list) {
            if (filter.accept(object)) {
                return object;
            }
        }
        return null;
    }

    public interface Filter<T> {
        boolean accept(T obj
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇11.Django基础九之中间件 下一篇Nexus-在项目中使用Maven私服,De..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目