转载请标明出处: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客户端系列博文时,有疑问欢迎留言,我看到了会及时解答。