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