Skip to content

Commit d29f398

Browse files
committed
实现主线程回调接口
1 parent 70cce87 commit d29f398

File tree

5 files changed

+51
-34
lines changed

5 files changed

+51
-34
lines changed

android-SpillOver/src/frameDesign/CacheHandler.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,27 @@ public class CacheHandler extends Thread {
1515
private CacheJudgement mCacheJudge;
1616

1717
private volatile boolean quit = false;
18+
19+
private ResponseParse mResponseParse = null;
1820

19-
21+
private ResponseHandler mCallBack = null;
22+
2023
public CacheHandler(BlockingQueue<Request<?>> mQueue,
21-
BlockingQueue<Request<?>> mNetQueue, Cache mCache) {
22-
this(mQueue,mNetQueue,mCache,new CacheJudgement());
24+
BlockingQueue<Request<?>> mNetQueue, Cache mCache,ResponseParse parse,ResponseHandler callBack) {
25+
this(mQueue,mNetQueue,mCache,parse,new CacheJudgement(),callBack);
2326
}
24-
27+
2528
public CacheHandler(BlockingQueue<Request<?>> mQueue, BlockingQueue<Request<?>> mNetQueue,
26-
Cache mCache,CacheJudgement judge) {
29+
Cache mCache,ResponseParse parse,CacheJudgement judge,ResponseHandler callBack) {
2730
this.mQueue = mQueue;
2831
this.mNetQueue = mNetQueue;
2932
this.mCache = mCache;
3033
this.mCacheJudge = judge;
34+
this.mResponseParse = parse;
35+
this.mCallBack = callBack;
3136
}
3237

38+
3339
@Override
3440
public void run() {
3541
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
@@ -45,18 +51,17 @@ public void run() {
4551
mNetQueue.put(request);
4652
}
4753
if(mCacheJudge.hasTTl(entry.ttl) || mCacheJudge.hasExpired(entry.expires)){
48-
//回调处理
54+
String callBackdata = null;
55+
callBackdata = mResponseParse.byteToEntity(entry.datas,entry.headers);
56+
mCallBack.callBack(request, callBackdata);
4957
continue;
5058
}
51-
5259
//过期了之后丢放etag 和 Last-Modified
5360
if(mCacheJudge.usefulEtag(entry.etag)) {
5461
request.setEtag(entry.etag);
5562
} else if(mCacheJudge.usefulIMS(entry.iMS)){
5663
request.setiMS(entry.iMS);
5764
}
58-
59-
6065
} catch (IOException e) {
6166
} finally{
6267
if(quit){

android-SpillOver/src/frameDesign/NetworkHandler.java

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.apache.http.StatusLine;
1111
import org.apache.http.message.BasicHttpResponse;
1212

13-
import android.util.Log;
13+
import android.os.Looper;
1414
import file.Cache;
1515
import file.IndexPoolOverflowException;
1616

@@ -26,13 +26,19 @@ public class NetworkHandler extends Thread{
2626

2727
private static final int DEFAULT_POOL_SIZE = 4096;
2828

29-
public NetworkHandler(BlockingQueue<Request<?>> mQueue, Cache mCache, HttpHeap mHttpHeap , ResponseParse parse) {
29+
private ResponseHandler mCallBack = null;
30+
31+
public NetworkHandler(BlockingQueue<Request<?>> mQueue, Cache mCache,
32+
HttpHeap mHttpHeap , ResponseParse parse , ResponseHandler response) {
3033
this.mQueue = mQueue;
3134
this.mCache = mCache;
3235
this.mHttpHeap = mHttpHeap;
3336
this.mResponseParse = parse;
37+
this.mCallBack = response;
3438
}
3539

40+
41+
3642
@Override
3743
public void run() {
3844

@@ -41,19 +47,22 @@ public void run() {
4147
while(true){
4248
try {
4349
Request<?> request = mQueue.take();
50+
51+
String callBackdata = null;
4452
BasicHttpResponse response = mHttpHeap.handlerRequest(request);
4553
Map<String,String> responseHeaders = convertHeaders(response.getAllHeaders());
4654
StatusLine statusLine = response.getStatusLine();
4755
int statusCode = statusLine.getStatusCode();
56+
57+
//304²Ù×÷;
4858
if(statusCode == HttpStatus.SC_NOT_MODIFIED){
49-
50-
51-
//304操作;
59+
Cache.Entry entry = mCache.get(request.getUrl());
60+
callBackdata = mResponseParse.byteToEntity(entry.datas,responseHeaders);
61+
mCallBack.callBack(request, callBackdata);
62+
continue;
5263
}
5364

54-
/**
55-
* 设好缓存
56-
*/
65+
// ÉèºÃ»º´æ
5766
if(request.shouldCache()){
5867
Cache.Entry entry = new Cache.Entry();
5968
long ttl = mResponseParse.parseTtl(responseHeaders.get("Cache-Control"));
@@ -65,16 +74,12 @@ public void run() {
6574
entry.iMS = responseHeaders.get("Last-Modified");
6675
entry.etag = responseHeaders.get("Etag");
6776
entry.headers = responseHeaders;
68-
entry.datas = mResponseParse.entityToBytes(response.getEntity(), new ByteArrayPool(DEFAULT_POOL_SIZE));
77+
byte[] bd = mResponseParse.entityToBytes(response.getEntity(), new ByteArrayPool(DEFAULT_POOL_SIZE));
78+
entry.datas = bd;
79+
callBackdata = mResponseParse.byteToEntity(bd,responseHeaders);
6980
mCache.put(request.getUrl(), entry);
7081
}
71-
72-
73-
74-
/**
75-
* 处理完缓存之后就进行reponse回调操作
76-
*/
77-
82+
mCallBack.callBack(request, callBackdata);
7883
} catch (IOException e) {
7984
e.printStackTrace();
8085
} catch (InterruptedException e) {
@@ -94,4 +99,6 @@ private static Map<String, String> convertHeaders(Header[] headers) {
9499
}
95100
return result;
96101
}
102+
103+
97104
}

android-SpillOver/src/frameDesign/Request.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@
1313
*/
1414
public abstract class Request <T> implements Comparable<Request<T>> {
1515

16-
public ResponseListener<?> listener;
16+
public ResponseListener<T> listener;
1717

1818
private String mUrl;
1919

20-
Request(String url ,ResponseListener<?> listener){
20+
Request(String url ,ResponseListener<T> listener){
2121
this.listener = listener;
2222
this.mUrl = url;
2323
}
2424

2525
interface ResponseListener<T>{
26-
public void callBack(T arg0);
26+
public void callBack(String responseData);
2727
}
2828

2929
public Method method = Method.POST;

android-SpillOver/src/frameDesign/RequestHandler.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import java.util.concurrent.BlockingQueue;
66
import java.util.concurrent.PriorityBlockingQueue;
77

8+
import android.os.Looper;
89
import android.util.Log;
9-
1010
import file.Cache;
1111

1212
public class RequestHandler implements Handler {
@@ -25,17 +25,20 @@ public class RequestHandler implements Handler {
2525

2626
private ResponseParse parse;
2727

28+
private ResponseHandler mCallBack = null;
29+
2830
public RequestHandler(HttpHeap heap, Cache cache) {
29-
this(heap,cache,new HttpResponseParse());
31+
this(heap,cache,new HttpResponseParse(),new CallBackResponse(new android.os.Handler(Looper.getMainLooper())));
3032
}
3133

3234

33-
public RequestHandler(HttpHeap heap, Cache cache,ResponseParse parse) {
35+
public RequestHandler(HttpHeap heap, Cache cache,ResponseParse parse,ResponseHandler callBack) {
3436
this.mHttpHeap = heap;
3537
this.mCache = cache;
3638
mCacheQueue = new PriorityBlockingQueue<Request<?>>();
3739
mNetQueue = new PriorityBlockingQueue<Request<?>>();
3840
this.parse = parse;
41+
this.mCallBack = callBack;
3942
}
4043

4144

@@ -46,8 +49,9 @@ public void parseRequest(Request<?> request) {
4649

4750
@Override
4851
public void init() {
49-
mCacheHandler = new CacheHandler(mCacheQueue, mNetQueue,mCache);
50-
mNetworkHandler = new NetworkHandler(mNetQueue,mCache,mHttpHeap,parse);
52+
53+
mCacheHandler = new CacheHandler(mCacheQueue, mNetQueue,mCache,parse,mCallBack);
54+
mNetworkHandler = new NetworkHandler(mNetQueue,mCache,mHttpHeap,parse,mCallBack);
5155
mCacheHandler.start();
5256
mNetworkHandler.start();
5357
mNetQueue.add(new Request<String>("http://192.168.1.104:8080/QQServer/Expires",new Request.ResponseListener<String>() {

android-SpillOver/src/test/MainActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import android.app.Activity;
1111
import android.os.Bundle;
12+
import android.util.Log;
1213

1314
public class MainActivity extends Activity{
1415

@@ -17,7 +18,7 @@ protected void onCreate(Bundle savedInstanceState) {
1718
super.onCreate(savedInstanceState);
1819
setContentView(R.layout.mainview);
1920

20-
21+
Log.i("DemoLog", Thread.currentThread().toString() + "Mainaaaas");
2122
new Thread(new Runnable() {
2223

2324
@Override

0 commit comments

Comments
 (0)