zoukankan      html  css  js  c++  java
  • Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)

          转载请标明出处:http://blog.csdn.net/android_ls/article/details/8909068

    声明:没看过仿人人android客户端系列博文,前面的相关文章的朋友,请不要看这篇博文,若看了没收获,会浪费您的时间。

               仿人人android客户端项目,在实现的过程中,我对原来的项目架构做了部分调整,给网友在阅读相关博文源码的过程中造成了部分障碍,这里说声:很抱歉。这一篇主要是解决网友提出有疑问的地方,我将新调整的与项目整体架构有关的java源文件在这里粘贴上,请查阅。

      EveryoneApplication类源码:

    package com.everyone.android.api;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.app.Application;
    
    /**
     * 功能描述:用于存放全局变量和公用的资源等
     * @author android_ls
     */
    public class EveryoneApplication extends Application {
    
        /**
         * Activity集合
         */
        private ArrayList<Activity> activitys = new ArrayList<Activity>();
    
        @Override
        public void onCreate() {
    
        }
    
        /**
         * 添加Activity到ArrayList<Activity>管理集合
         * @param activity
         */
        public void addActivity(Activity activity) {
            String className = activity.getClass().getName();
            for (Activity at : activitys) {
                if (className.equals(at.getClass().getName())) {
                    activitys.remove(at);
                    break;
                }
            }
            activitys.add(activity);
        }
    
        /**
         * 退出应用程序的时候,手动调用
         */
        @Override
        public void onTerminate() {
            for (Activity activity : activitys) {
                activity.finish();
            }
            // System.exit(0);
        }
    
    
    }
    

       

    BaseActivity类源码:

    package com.everyone.android.api;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.Window;
    import android.widget.Toast;
    
    /**
     * 功能描述:应用中界面(Activity)的基类
     * 对原有的Activity类进行扩展
     * @author android_ls
     */
    public abstract class BaseActivity extends Activity {
    
        protected Context mContext;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
    
            int layoutId = getLayoutId();
            if (layoutId != 0) {
                setContentView(layoutId);
                // 删除窗口背景
                getWindow().setBackgroundDrawable(null);
            }
    
            mContext = this.getApplicationContext();
            ((EveryoneApplication) this.getApplication()).addActivity(this);
    
            // 向用户展示信息前的准备工作在这个方法里处理
            preliminary();
        }
    
        /**
         * 向用户展示信息前的准备工作在这个方法里处理
         */
        protected void preliminary(){
            // 初始化组件
            setupViews();
    
            // 初始化数据
            initialized();
        }
        
        public Context getContext() {
            return mContext;
        }
    
        /**
         * 布局文件ID
         * @return
         */
        protected abstract int getLayoutId();
    
        /**
         * 初始化组件
         */
        protected abstract void setupViews();
    
        /**
         * 初始化数据
         */
        protected abstract void initialized();
    
        @Override
        protected void onPause() {
            super.onPause();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    
        /**
         * 显示Toast形式的提示信息
         * @param message
         */
        protected void show(String message) {
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
        }
    
    }
    

      

    NetworkBaseActivity类源码:

    package com.everyone.android.api;
    
    import java.net.HttpURLConnection;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.os.Handler;
    
    import com.everyone.android.net.AsyncBaseRequest;
    import com.everyone.android.net.DefaultThreadPool;
    
    /**
     * 功能描述:应用中需要访问网络的Activity基类
     * @author android_ls
     */
    public abstract class NetworkBaseActivity extends BaseActivity {
    
        /**
         * 当前activity所持有的所有网络请求
         */
        protected List<AsyncBaseRequest> mAsyncRequests;
    
        /**
         * 当前activity所持有的Handler
         */
        protected Handler mHandler;
    
        /**
         * 当前activity所持有的线程池对象
         */
        protected DefaultThreadPool mDefaultThreadPool;
    
        protected AuthTokenManager mAuthTokenManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        /**
         * 向用户展示信息前的准备工作在这个方法里处理
         */
        protected void preliminary() {
            mHandler = new Handler();
            mAsyncRequests = new ArrayList<AsyncBaseRequest>();
            mDefaultThreadPool = DefaultThreadPool.getInstance();
            mAuthTokenManager = new AuthTokenManager(this);
    
            // 初始化组件
            setupViews();
    
            // 初始化数据
            initialized();
        }
    
        public AuthTokenManager getAuthTokenManager() {
            return mAuthTokenManager;
        }
    
        public List<AsyncBaseRequest> getAsyncRequests() {
            return mAsyncRequests;
        }
    
        public Handler getHandler() {
            return mHandler;
        }
    
        public DefaultThreadPool getDefaultThreadPool() {
            return mDefaultThreadPool;
        }
    
        @Override
        protected void onPause() {
            /**
             * 在activity暂停的时候,同时设置终止标识,终止异步线程
             */
            cancelAllRequest();
            super.onPause();
        }
    
        @Override
        protected void onDestroy() {
            /**
             * 在activity销毁的时候,同时设置终止标识,终止异步线程
             */
            cancelAllRequest();
            super.onDestroy();
        }
    
        /**
         * 取消当前Activity相关的网络请求
         */
        private void cancelAllRequest() {
            if (mAsyncRequests != null && mAsyncRequests.size() > 0) {
                try {
                    int size = mAsyncRequests.size();
                    for (int i = 0; i < size; i++) {
                        AsyncBaseRequest request = mAsyncRequests.get(i);
                        Thread thread = new Thread(request);
                        if (thread.isAlive() || !Thread.interrupted()) {
                            request.setInterrupted(true);
                        }
    
                        HttpURLConnection conn = request.getRequestConn();
                        if (conn != null) {
                            // conn.disconnect();
                            System.err.println("onDestroy disconnect URL: " + conn.getURL());
                        }
    
                        mAsyncRequests.remove(request);
                        size = mAsyncRequests.size();
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
    }
    

       下面解决一个网友在阅读

    Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(编码实现)

    博文时提出的疑问,截图如下:

      上面截图中,代码片段中的AppBaseActivity类就是NetworkBaseActivity类了。

     大家在阅读我写的有关仿人人Android客户端系列博文时,有疑问欢迎留言,我看到了会及时解答。







  • 相关阅读:
    PAT1137
    Ubuntu小工具
    C文件的格式化工具(astyle)
    linux批量替换文本字符串
    scp & cat远程文件操作
    上传附件中英文混合的文件名上传
    membership DB生成 & dll 强命名 & 证书生成
    机器Coding For WinForm
    机器Coding For WPF
    C# cmd bcp 导出数据
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3071933.html
Copyright © 2011-2022 走看看