• android app 架构设计02


    二:在开放的过程中,尽量把工具类,BaseActivity 放在指定的位置。

    DateFormat
    Bitmap
    Notification
    Shared Preference
    Environment
    Device

    三:

    2.2 Task管理

    线程仅仅是一种机制,保证我们要完毕的任务不执行在UI线程(也就是说不堵塞UI)。完毕的任务才是我们关注的核心。因此,我们能够通过设计,把线程封装,让使用者根本感觉不到是线程,他仅仅用关心他要做的事情即可了。
    这里,我们能够设计一种”异步链式调用”的框架。把线程进行了封装。使用都仅仅须要这样用:

    1
    2
    3
    4
    5
    new TaskManager()
    .next(task1)
    .next(task2)
    .next(task3).
    .execute();

    这里。task1, task2, task3是顺序运行的,举个样例:我们要訪问网络。取得一个图片。使用这个TaskManager我们须要3个task,

    task1:显示一个ProgressDialog。

    task2:訪问网络,创建bitmap。

    task3:关闭对话框,显示bitmap。

    这一点,能够參考CoreLibproject中的task.TaskManager类。

    关于TaskManager,有下面几点须要注意:

    -封装了线程
    让调用者仅仅关注自己的业务处理
    保证顺序链式地运行某一个任务
    上一个任务的输出,作为下一个任务的输入
    能暂停、恢复不论什么一个任务


    四: 

    2.3 缓存设计

    -把内存占用量大的对象存放在缓存中,如bitmap
    利用了LruCache类来实现
    利用了AsyncTask类来载入bitmap
    不用再手动释放bitmap内存,该操作有风险
    不用再关心AbsListView的scroll状态
    关于缓存的很多其它具体细节,请參考[ 请參考CoreLibproject中的cache包 ]。

    这样做,有什么优点。 不用再手动释放bitmap内在。该操作有风险,由于该bitmap是否有View引用,假设当一个View在试图绘制一个已经回收的bitmap。这里会抛出异常。

    五:

    2.4 线程管理

    无消息循环的线程:

    1
    2
    3
    4
    5
    6
    new Thread(null, new Runnable() {
        public void run() {
            // Do you works.
        }
    
    }, "Thread_name_xxx").start();

    什么情况下使用这样的线程:

    -做完一件事情就结束,这件事发生频率不高。比方从SD card中读取图片数据
    不须要复用线程

    在使用线程,最好给线程加上名字。这样利用高度与跟踪。

    有消息循环的线程:

    这种线程拥有消息循环,当消息队列中没有消息时。这个线程会被挂起。我们要做一件事情时。仅仅须要给它发送一个消息即可了。

    这样的情况一般是为了复用线程,不用频繁创建线程,比方音乐播放器程序。专门启动一个有消息循环的线程来获得音乐的专辑图片。

    我们通常还要创建一个与这个线程的消息循环(Looper)相关联的Handler。由它来处理消息,注意。这做的事情是执行在后台线程的。

  • 相关阅读:
    什么是RAID?RAID有什么用?RAID原理
    Java和PHP哪个方向更有前途?
    Sublime Text 3 Build 3047 32bit/64bit 简体中文安装破解版
    学习笔记之--java EE 环境的搭建
    学习笔记之--Navicat Premium创建数据表
    学习笔记之--MySQL图形界面软件Navicat Premium的安装
    #Javascript:this用法整理
    js解决通过json传来的timestamp类型时间的显示问题
    Eclipse快捷键大全
    形参与实参的区别
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5117761.html
Copyright © 2020-2023  润新知