Androidリクエストネットワーク-サードパーティライブラリandroid-async-httpの使用(3)
本文は作者のオリジナルで、転載して原文の住所を添付して、ありがとうございます!
原文住所:http://blog.csdn.net/a774057695/article/details/47337547
前言
前に私たちは大体どのようにアクセスするかを知っていましたが、この記事は急いでデータを手に入れた後の処理をするのではなく、アクセスをキャンセルすると思います.
アクセスネットワークは時間のかかる操作であり、私たちは絶対にこの操作をメインスレッドに置かないと思います.私たちは必ずユーザーに現在待機している過程をどのように丁寧に通知するかを考え、この過程を面白く、文芸的に見せるかを考えていると思います.しかし、ユーザーが直接離れる可能性は否定できません.私たちはこのような状況に遭遇したことがあるかもしれません.
1. プロンプト待ちのProgressDialogオブジェクトはキャンセル不可に設定されており、ポイントバックグラウンドが応答せず、最終的にユーザーを怒らせます.
2. 提示待ちのProgressDialogオブジェクトはキャンセルでき、ユーザーは他のインタフェースに来た.元のインタフェースの多くは破棄されずactivityスタックの非上部に存在し、ネットワーク要求が結果(望ましくない結果であっても)を得ると、このスレッドは後続の論理を実行してactivityをフロントに戻し、乱暴にユーザーを中断する.
3. 上記の状況を考慮して、スレッドを処理しましたが、ネットワークへのアクセス要求は本当にキャンセルされませんでした.バックグラウンドでトラフィックを消費し、価値のあることをしていません.
まだこれらの問題をうまく解決していない友达は自分のコードにきっと満足していないと思います.aahではこの部分をよく処理しています.
第1編では,構造関数でHttpClientインスタンスを取得するたびにcontextを与えるコードについても触れた.いくつかの説明があります
1. 静的メソッドにはcontext参照がありGC回収に影響します.ここではdemoです.これらの問題は処理しません.
2. パラメータを持たないpostの方法(私はどうしても必要ないと思いますが、使わない)の原型には注意が必要です
3. 第1編では修正されず、
まずsampleで使うurlを整理して、公式の例からほじくり出して、私はweb開発をしないので、いくつかの便利なテストアドレスもはっきりしていないで、本当に1種の本が使う時恨みが少ない感じがします.
モード
方法
baseurl
get
getWithoutParams
http://httpbin.org/delay/6
getWithparams
http://httpbin.org/delay/6
post
postWithParams
https://httpbin.org/post
目的の説明
本編では、主にキャンセル要求機能を説明し、キャンセルには3つの主な方法があります.全部キャンセル tagに従って をキャンセル request handle をキャンセル
実はもう一つの主な方法があります.contextが必要です.このcontextを引用したrequestsを全部cancelして、本編ではプレゼンテーションをしません.
経験に限られて、私はテストの規範についてよく知らないが、そういえばこの編もいくつかの機能を使って、logを利用して証明しようとしただけだ.
今回私たちはこのようなことをします.効果を見るように要求する 同じリクエストを複数開始する効果 を見る.複数の異なる方式の要求を開始する効果 を見る.は、戻る前にプログラムを非最上位に見せるように要求する を開始する.は、複数の要求を開始し、戻る前にプログラムを非最上位の効果 にする.は、戻る前に3つの方法で効果 をキャンセルする要求を開始する.は、複数の要求を開始し、戻る前に3つの方法で効果 をキャンセルする.
コード#コード#
合計3つのコードファイル:レイアウトファイル、HttpUtilメソッドクラス、activityインスタンス.新規プロジェクトの注意インターネット権限 操作を容易にするために、私はリクエスト時にdialogなどの操作を表示しませんでした. は、第1編とは異なり、context が提供されています. sampleとしてのコード品質は低く、aah を理解するためにアプリケーションに移行しないでください.注意!注意!注意!操作を容易にするために、http://httpbin.org/delay/66秒遅れて応答するので、小さくしたり大きくしたりすることができますが、接続タイムアウト設定時間は合理的に設定してください.
レイアウトファイル:
次のように見えます.
(なんとか大きさを変える方法に気づいたので、ブスだから気にしないで)
HttpUtil.java
MainActivity.java
テスト内容
まずリクエストを開始し、log出力を見てみましょう.
それから複数のリクエストを出して、もう少しでいいです.getWithParamsを3回連続クリックすると、最後の3回の出力が表示されます.
複数のスタンプ、異なるスタンプを押すことができます
次に面白いことをして、getリクエストを開始し(なぜpostを使わないのか、考えないでください.ただ、ここでget方式でリクエストされたウェブサイトの応答時間が長く、反応に間に合うだけです)、クリックして、プログラムを非フロントにします(backまたはhomeでもいいです).
logは貼らないで、あなたはlogがやはり得た内容を出力したことを発見することができて、これは私たちがcancelを研究する原因で、結局私たちはactivityを脱退してスタックから削除することはめったにありません.
リクエストを開始しcancelallすると、このようなlogが見つかります.
では、saveHandle、cancelrequesthandleをクリックしてみましょう.
tagをもう一度試してみますが、ここではtagをリフレッシュしていません.
後記
この冗長なブログも書き終わりますので、リクエストのキャンセルについてある程度知っておくべきで、いくつかのシーンでコードの中でリクエストのキャンセルを行う意識もあるに違いありません.次は意外にもデータを得た後の処理です.
本文は作者のオリジナルで、転載して原文の住所を添付して、ありがとうございます!
原文住所:http://blog.csdn.net/a774057695/article/details/47337547
原文住所:http://blog.csdn.net/a774057695/article/details/47337547
前言
前に私たちは大体どのようにアクセスするかを知っていましたが、この記事は急いでデータを手に入れた後の処理をするのではなく、アクセスをキャンセルすると思います.
アクセスネットワークは時間のかかる操作であり、私たちは絶対にこの操作をメインスレッドに置かないと思います.私たちは必ずユーザーに現在待機している過程をどのように丁寧に通知するかを考え、この過程を面白く、文芸的に見せるかを考えていると思います.しかし、ユーザーが直接離れる可能性は否定できません.私たちはこのような状況に遭遇したことがあるかもしれません.
1. プロンプト待ちのProgressDialogオブジェクトはキャンセル不可に設定されており、ポイントバックグラウンドが応答せず、最終的にユーザーを怒らせます.
2. 提示待ちのProgressDialogオブジェクトはキャンセルでき、ユーザーは他のインタフェースに来た.元のインタフェースの多くは破棄されずactivityスタックの非上部に存在し、ネットワーク要求が結果(望ましくない結果であっても)を得ると、このスレッドは後続の論理を実行してactivityをフロントに戻し、乱暴にユーザーを中断する.
3. 上記の状況を考慮して、スレッドを処理しましたが、ネットワークへのアクセス要求は本当にキャンセルされませんでした.バックグラウンドでトラフィックを消費し、価値のあることをしていません.
まだこれらの問題をうまく解決していない友达は自分のコードにきっと満足していないと思います.aahではこの部分をよく処理しています.
第1編では,構造関数でHttpClientインスタンスを取得するたびにcontextを与えるコードについても触れた.いくつかの説明があります
1. 静的メソッドにはcontext参照がありGC回収に影響します.ここではdemoです.これらの問題は処理しません.
2. パラメータを持たないpostの方法(私はどうしても必要ないと思いますが、使わない)の原型には注意が必要です
3. 第1編では修正されず、
まずsampleで使うurlを整理して、公式の例からほじくり出して、私はweb開発をしないので、いくつかの便利なテストアドレスもはっきりしていないで、本当に1種の本が使う時恨みが少ない感じがします.
モード
方法
baseurl
get
getWithoutParams
http://httpbin.org/delay/6
getWithparams
http://httpbin.org/delay/6
post
postWithParams
https://httpbin.org/post
目的の説明
本編では、主にキャンセル要求機能を説明し、キャンセルには3つの主な方法があります.
実はもう一つの主な方法があります.contextが必要です.このcontextを引用したrequestsを全部cancelして、本編ではプレゼンテーションをしません.
経験に限られて、私はテストの規範についてよく知らないが、そういえばこの編もいくつかの機能を使って、logを利用して証明しようとしただけだ.
今回私たちはこのようなことをします.
コード#コード#
合計3つのコードファイル:レイアウトファイル、HttpUtilメソッドクラス、activityインスタンス.
レイアウトファイル:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/btn_getWithoutParams"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="getWithoutParams" />
<Button
android:id="@+id/btn_getWithParams"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="getWithParams" />
<Button
android:id="@+id/btn_postWithParams"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="postWithParams" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_addHandle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SaveHandle" />
<Button
android:id="@+id/btn_cancelHandle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="cancel request handle" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btn_setTag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="requestWithTag" />
<Button
android:id="@+id/btn_cancelTag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cancel by tag" />
</LinearLayout>
<Button
android:id="@+id/btn_cancelAll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cancel all" />
</LinearLayout>
</ScrollView>
</LinearLayout>
次のように見えます.
(なんとか大きさを変える方法に気づいたので、ブスだから気にしないで)
HttpUtil.java
package [your package name]
import java.util.LinkedList;
import java.util.List;
import android.content.Context;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestHandle;
import com.loopj.android.http.RequestParams;
public class HttpUtil {
//
private static AsyncHttpClient client =new AsyncHttpClient();
private static List<RequestHandle> requestHandles = new LinkedList<RequestHandle>();
// , , 10s
static
{
client.setTimeout(10000);
}
/**
* params,get
* byte[],
* */
public static void getWithoutParams(Context mContext, String urlString,AsyncHttpResponseHandler res)
{
client.get(mContext ,urlString, res);
}
/**
* params,get
* byte[],
* */
public static void getWithParams(Context mContext , String urlString,RequestParams params,AsyncHttpResponseHandler res)
{
client.get(mContext, urlString, params,res);
}
/**
* params、get
* JsonObject JsonArray
*
* */
public static void getWithoutParamsForJson(Context mContext , String urlString,JsonHttpResponseHandler res)
{
client.get(mContext ,urlString, res);
}
/**
* params、get
* JsonObject JsonArray
*
* */
public static void getWithParamsForJson(Context mContext, String urlString,RequestParams params,JsonHttpResponseHandler res)
{
client.get(mContext,urlString, params,res);
}
/**
*
* byte
* */
public static void get(String uString, BinaryHttpResponseHandler bHandler)
{
client.get(uString, bHandler);
}
/**
* params, post
* , params
* */
public static void postWithoutParams(String urlString, AsyncHttpResponseHandler res)
{
client.post(urlString, res);
}
/**
* params,post
* */
public static void postWithParams(Context mContext, String urlString,RequestParams params, AsyncHttpResponseHandler res)
{
client.post(mContext, urlString, params, res);
}
public static AsyncHttpClient getClient()
{
return client;
}
public static void setTag(Context mContext,String urlString,AsyncHttpResponseHandler res,int tag)
{
client.get(mContext, urlString, res).setTag(tag);
}
/**
* handle
* */
public static void setHandle(Context mContext,String urlString,AsyncHttpResponseHandler res)
{
addHandle(getWithoutParams2(mContext,urlString,res));
}
// handle
private static void addHandle(RequestHandle handle) {
if(null!=handle) {
requestHandles.add(handle);
}
}
// handle
public static List<RequestHandle> getRequestHandles() {
return requestHandles;
}
//get , RequestHandle
private static RequestHandle getWithoutParams2(Context mContext, String urlString,AsyncHttpResponseHandler res)
{
return client.get(mContext ,urlString, res);
}
}
MainActivity.java
package [your package name]
import org.apache.http.Header;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestHandle;
import com.loopj.android.http.RequestParams;
@SuppressWarnings("deprecation")
public class MainActivity extends Activity {
private Context mContext = this;
private int tag = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button getWithParams = (Button)findViewById(R.id.btn_getWithParams);
Button getWithoutParams = (Button)findViewById(R.id.btn_getWithoutParams);
Button postWithParams = (Button)findViewById(R.id.btn_postWithParams);
Button cancelHandle = (Button)findViewById(R.id.btn_cancelHandle);
Button cancelTag = (Button)findViewById(R.id.btn_cancelTag);
Button cancelAll = (Button)findViewById(R.id.btn_cancelAll);
Button requestSaveHandle = (Button)findViewById(R.id.btn_addHandle);
Button requestWithTag = (Button)findViewById(R.id.btn_setTag);
getWithoutParams.setOnClickListener(bt_listener);
getWithParams.setOnClickListener(bt_listener);
postWithParams.setOnClickListener(bt_listener);
cancelAll.setOnClickListener(bt_listener);
cancelHandle.setOnClickListener(bt_listener);
cancelTag.setOnClickListener(bt_listener);
requestSaveHandle.setOnClickListener(bt_listener);
requestWithTag.setOnClickListener(bt_listener);
}
OnClickListener bt_listener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.btn_getWithoutParams:
getWithoutParams();
break;
case R.id.btn_getWithParams:
getWithParams();
break;
case R.id.btn_postWithParams:
postWithParams();
break;
case R.id.btn_addHandle:
addHandle();
break;
case R.id.btn_cancelHandle:
cancelHandle();
break;
case R.id.btn_setTag:
setTag();
break;
case R.id.btn_cancelTag:
cancelByTag();
break;
case R.id.btn_cancelAll:
cancelall();
break;
default:
break;
}
}
};
private void getWithoutParams() {
String urlString = "http://httpbin.org/delay/6";
HttpUtil.getWithoutParams(mContext,urlString, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
Log.i("statuscode:", ""+arg0);
arg3.printStackTrace(System.out);
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
Log.i("statuscode:", ""+arg0);
String jsonString = new String(arg2);
Log.i("response:",jsonString);
}
});
}
protected void addHandle() {
String urlString = "http://httpbin.org/delay/6";
HttpUtil.setHandle(mContext,urlString, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
Log.i("statuscode:", ""+arg0);
arg3.printStackTrace(System.out);
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
Log.i("statuscode:", ""+arg0);
String jsonString = new String(arg2);
Log.i("response:",jsonString);
}
});
}
protected void cancelHandle() {
Log.d("CancelLog", String.format("Number of handles found: %d", HttpUtil.getRequestHandles().size()));
int counter = 0;
for (RequestHandle handle : HttpUtil.getRequestHandles()) {
if (!handle.isCancelled() && !handle.isFinished()) {
Log.d("CancelLog", String.format("Cancelling handle %d", counter));
Log.d("CancelLog", String.format("Handle %d cancel", counter) + (handle.cancel(true) ? " succeeded" : " failed"));
} else {
Log.d("CancelLog", String.format("Handle %d already non-cancellable", counter));
}
counter++;
}
}
protected void setTag() {
String urlString = "http://httpbin.org/delay/6";
HttpUtil.setTag(mContext,urlString, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
Log.i("statuscode:", ""+arg0);
arg3.printStackTrace(System.out);
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
Log.i("statuscode:", ""+arg0);
String jsonString = new String(arg2);
Log.i("response:",jsonString);
}
},tag);
}
private void getWithParams() {
String urlString = "http://httpbin.org/delay/6";
RequestParams params = new RequestParams();
params.add("key1", "v1");
params.add("key2", "v2");
HttpUtil.getWithParams(mContext, urlString, params, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
Log.i("statuscode:", ""+arg0);
arg3.printStackTrace(System.out);
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
Log.i("statuscode:", ""+arg0);
String jsonString = new String(arg2);
Log.i("response:",jsonString);
}
});
}
private void cancelall() {
HttpUtil.getClient().cancelAllRequests(true);
}
private void cancelByTag() {
HttpUtil.getClient().cancelRequestsByTAG(tag, true);
}
private void postWithParams() {
String urlString = "https://httpbin.org/post";
RequestParams params = new RequestParams();
params.add("postParam1", "p1");
params.add("postParam2", "p2");
HttpUtil.postWithParams(mContext,urlString, params, new AsyncHttpResponseHandler() {
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2,
Throwable arg3) {
Log.i("statuscode:", ""+arg0);
String er = new String(arg2);
Log.i("errorResponse:",""+er);
arg3.printStackTrace(System.out);
}
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
Log.i("statuscode:", ""+arg0);
String jsonString = new String(arg2);
Log.i("response:",jsonString);
}
});
}
}
テスト内容
まずリクエストを開始し、log出力を見てみましょう.
08-07 13:44:07.453: I/View(14827): Touch down dispatch to android.widget.Button{42a2e598 VFED..C. ........ 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=157.73648, y[0]=43.82669, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487004872, downTime=487004872, deviceId=3, source=0x1002 }
08-07 13:44:07.517: I/View(14827): Touch up dispatch to android.widget.Button{42a2e598 VFED..C. ...p.... 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=156.73787, y[0]=38.830597, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487004938, downTime=487004872, deviceId=3, source=0x1002 }
08-07 13:44:07.528: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:44:07.528: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:44:07.528: D/dalvikvm(14827): create new thread
08-07 13:44:07.529: D/dalvikvm(14827): new thread created
08-07 13:44:07.529: D/dalvikvm(14827): update thread list
08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: interp stack at 0x60d80000
08-07 13:44:07.529: D/dalvikvm(14827): init ref table
08-07 13:44:07.529: D/dalvikvm(14827): init mutex
08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: created from interp
08-07 13:44:07.529: D/dalvikvm(14827): start new thread
08-07 13:44:07.529: D/dalvikvm(14827): threadid=12: notify debugger
08-07 13:44:07.529: D/dalvikvm(14827): threadid=12 (pool-1-thread-6): calling run()
08-07 13:44:07.530: I/System.out(14827): [CDS]rx timeout:1
08-07 13:44:07.530: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:44:07.530: I/System.out(14827): [CDS]close[53132]
08-07 13:44:07.530: I/System.out(14827): close [socket][/0.0.0.0:53132]
08-07 13:44:07.532: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
08-07 13:44:07.532: I/System.out(14827): propertyValue:true
08-07 13:44:07.533: I/System.out(14827): [socket][5] connection /54.175.219.8:80;LocalPort=38166(10000)
08-07 13:44:07.533: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
08-07 13:44:07.534: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80
08-07 13:44:07.775: I/System.out(14827): [socket][/192.168.255.220:38166] connected
08-07 13:44:07.775: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:44:07.775: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
08-07 13:44:07.776: I/System.out(14827): >doSendRequest
08-07 13:44:07.776: I/System.out(14827): <doSendRequest
08-07 13:44:14.022: V/AsyncHttpRH(14827): Progress 241 from 241 (100%)
<span style="background-color: rgb(204, 204, 204);">08-07 13:44:14.022: I/statuscode:(14827): 200
08-07 13:44:14.022: I/response:(14827): {
08-07 13:44:14.022: I/response:(14827): "args": {},
08-07 13:44:14.022: I/response:(14827): "data": "",
08-07 13:44:14.022: I/response:(14827): "files": {},
08-07 13:44:14.022: I/response:(14827): "form": {},
08-07 13:44:14.022: I/response:(14827): "headers": {
08-07 13:44:14.022: I/response:(14827): "Accept-Encoding": "gzip",
08-07 13:44:14.022: I/response:(14827): "Content-Length": "0",
08-07 13:44:14.022: I/response:(14827): "Host": "httpbin.org"
08-07 13:44:14.022: I/response:(14827): },
08-07 13:44:14.022: I/response:(14827): "origin": "222.92.185.206",
08-07 13:44:14.022: I/response:(14827): "url": "http://httpbin.org/delay/6"
08-07 13:44:14.022: I/response:(14827): }</span>
08-07 13:45:14.022: D/dalvikvm(14827): threadid=12: exiting
08-07 13:45:14.022: D/dalvikvm(14827): threadid=12: bye!
もっと試して、リラックスしてください.それから複数のリクエストを出して、もう少しでいいです.getWithParamsを3回連続クリックすると、最後の3回の出力が表示されます.
08-07 13:48:42.202: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:48:42.204: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:48:42.204: D/dalvikvm(14827): create new thread
08-07 13:48:42.204: D/dalvikvm(14827): new thread created
08-07 13:48:42.204: D/dalvikvm(14827): update thread list
08-07 13:48:42.205: D/dalvikvm(14827): threadid=12: interp stack at 0x60d80000
08-07 13:48:42.205: D/dalvikvm(14827): init ref table
08-07 13:48:42.205: D/dalvikvm(14827): init mutex
08-07 13:48:42.205: D/dalvikvm(14827): threadid=12: created from interp
08-07 13:48:42.205: D/dalvikvm(14827): start new thread
08-07 13:48:42.206: D/dalvikvm(14827): threadid=12: notify debugger
08-07 13:48:42.206: D/dalvikvm(14827): threadid=12 (pool-1-thread-7): calling run()
08-07 13:48:42.207: I/System.out(14827): [CDS]rx timeout:1
08-07 13:48:42.207: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:42.208: I/System.out(14827): [CDS]close[38166]
08-07 13:48:42.208: I/System.out(14827): close [socket][/0.0.0.0:38166]
08-07 13:48:42.210: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
08-07 13:48:42.210: I/System.out(14827): propertyValue:true
08-07 13:48:42.214: I/System.out(14827): [socket][6] connection /54.175.219.8:80;LocalPort=49560(10000)
08-07 13:48:42.214: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
08-07 13:48:42.215: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80
08-07 13:48:42.250: I/View(14827): Touch up dispatch to android.widget.Button{42a2f000 VFED..C. ...p..ID 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=487.2788, y[0]=45.74942, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279671, downTime=487279590, deviceId=3, source=0x1002 }
08-07 13:48:42.255: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:48:42.257: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:48:42.257: D/dalvikvm(14827): create new thread
08-07 13:48:42.257: D/dalvikvm(14827): new thread created
08-07 13:48:42.257: D/dalvikvm(14827): update thread list
08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: interp stack at 0x60da2000
08-07 13:48:42.257: D/dalvikvm(14827): init ref table
08-07 13:48:42.257: D/dalvikvm(14827): init mutex
08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: created from interp
08-07 13:48:42.257: D/dalvikvm(14827): start new thread
08-07 13:48:42.257: D/dalvikvm(14827): threadid=13: notify debugger
08-07 13:48:42.257: D/dalvikvm(14827): threadid=13 (pool-1-thread-8): calling run()
08-07 13:48:42.259: I/System.out(14827): [CDS]rx timeout:1
08-07 13:48:42.259: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:42.259: I/System.out(14827): [CDS]close[53062]
08-07 13:48:42.260: I/System.out(14827): close [socket][/0.0.0.0:53062]
08-07 13:48:42.261: I/System.out(14827): [socket][7] connection /54.175.219.8:80;LocalPort=33638(10000)
08-07 13:48:42.261: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
08-07 13:48:42.261: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80
08-07 13:48:42.327: I/View(14827): Touch down dispatch to android.widget.Button{42a2f000 VFED..C. ......ID 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=483.28436, y[0]=44.750183, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279735, downTime=487279735, deviceId=3, source=0x1002 }
08-07 13:48:42.411: I/View(14827): Touch up dispatch to android.widget.Button{42a2f000 VFED..C. ...p.... 0,97-656,194 #7f080003 app:id/btn_getWithParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=483.28436, y[0]=44.750183, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487279829, downTime=487279735, deviceId=3, source=0x1002 }
08-07 13:48:42.424: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:48:42.428: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:48:42.428: D/dalvikvm(14827): create new thread
08-07 13:48:42.428: D/dalvikvm(14827): new thread created
08-07 13:48:42.428: D/dalvikvm(14827): update thread list
08-07 13:48:42.428: D/dalvikvm(14827): threadid=14: interp stack at 0x60dc4000
08-07 13:48:42.429: D/dalvikvm(14827): init ref table
08-07 13:48:42.429: D/dalvikvm(14827): init mutex
08-07 13:48:42.429: D/dalvikvm(14827): threadid=14: created from interp
08-07 13:48:42.429: D/dalvikvm(14827): start new thread
08-07 13:48:42.429: D/dalvikvm(14827): threadid=14: notify debugger
08-07 13:48:42.429: D/dalvikvm(14827): threadid=14 (pool-1-thread-9): calling run()
08-07 13:48:42.433: I/System.out(14827): [CDS]rx timeout:1
08-07 13:48:42.433: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:42.434: I/System.out(14827): [CDS]close[44353]
08-07 13:48:42.435: I/System.out(14827): close [socket][/0.0.0.0:44353]
08-07 13:48:42.438: I/System.out(14827): [socket][8] connection /54.175.219.8:80;LocalPort=44408(10000)
08-07 13:48:42.438: I/System.out(14827): [CDS]connect[/54.175.219.8:80] tm:10
08-07 13:48:42.439: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80
08-07 13:48:42.581: I/System.out(14827): [socket][/192.168.255.220:49560] connected
08-07 13:48:42.581: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:42.581: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
08-07 13:48:42.586: I/System.out(14827): >doSendRequest
08-07 13:48:42.589: I/System.out(14827): <doSendRequest
08-07 13:48:43.603: I/System.out(14827): [socket][/192.168.255.220:33638] connected
08-07 13:48:43.604: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:43.604: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
08-07 13:48:43.607: I/System.out(14827): >doSendRequest
08-07 13:48:43.608: I/System.out(14827): <doSendRequest
08-07 13:48:43.783: I/System.out(14827): [socket][/192.168.255.220:44408] connected
08-07 13:48:43.783: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:48:43.783: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
08-07 13:48:43.786: I/System.out(14827): >doSendRequest
08-07 13:48:43.787: I/System.out(14827): <doSendRequest
08-07 13:48:48.936: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
<span style="background-color: rgb(204, 204, 204);">08-07 13:48:48.937: I/statuscode:(14827): 200
08-07 13:48:48.939: I/response:(14827): {
08-07 13:48:48.939: I/response:(14827): "args": {
08-07 13:48:48.939: I/response:(14827): "key1": "v1",
08-07 13:48:48.939: I/response:(14827): "key2": "v2"
08-07 13:48:48.939: I/response:(14827): },
08-07 13:48:48.939: I/response:(14827): "data": "",
08-07 13:48:48.939: I/response:(14827): "files": {},
08-07 13:48:48.939: I/response:(14827): "form": {},
08-07 13:48:48.939: I/response:(14827): "headers": {
08-07 13:48:48.939: I/response:(14827): "Accept-Encoding": "gzip",
08-07 13:48:48.939: I/response:(14827): "Content-Length": "0",
08-07 13:48:48.939: I/response:(14827): "Host": "httpbin.org"
08-07 13:48:48.939: I/response:(14827): },
08-07 13:48:48.939: I/response:(14827): "origin": "222.92.185.206",
08-07 13:48:48.939: I/response:(14827): "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
08-07 13:48:48.939: I/response:(14827): }
08-07 13:48:50.678: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
08-07 13:48:50.680: I/statuscode:(14827): 200
08-07 13:48:50.681: I/response:(14827): {
08-07 13:48:50.681: I/response:(14827): "args": {
08-07 13:48:50.681: I/response:(14827): "key1": "v1",
08-07 13:48:50.681: I/response:(14827): "key2": "v2"
08-07 13:48:50.681: I/response:(14827): },
08-07 13:48:50.681: I/response:(14827): "data": "",
08-07 13:48:50.681: I/response:(14827): "files": {},
08-07 13:48:50.681: I/response:(14827): "form": {},
08-07 13:48:50.681: I/response:(14827): "headers": {
08-07 13:48:50.681: I/response:(14827): "Accept-Encoding": "gzip",
08-07 13:48:50.681: I/response:(14827): "Content-Length": "0",
08-07 13:48:50.681: I/response:(14827): "Host": "httpbin.org"
08-07 13:48:50.681: I/response:(14827): },
08-07 13:48:50.681: I/response:(14827): "origin": "222.92.185.206",
08-07 13:48:50.681: I/response:(14827): "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
08-07 13:48:50.681: I/response:(14827): }
08-07 13:48:50.854: V/AsyncHttpRH(14827): Progress 296 from 296 (100%)
08-07 13:48:50.854: I/statuscode:(14827): 200
08-07 13:48:50.855: I/response:(14827): {
08-07 13:48:50.855: I/response:(14827): "args": {
08-07 13:48:50.855: I/response:(14827): "key1": "v1",
08-07 13:48:50.855: I/response:(14827): "key2": "v2"
08-07 13:48:50.855: I/response:(14827): },
08-07 13:48:50.855: I/response:(14827): "data": "",
08-07 13:48:50.855: I/response:(14827): "files": {},
08-07 13:48:50.855: I/response:(14827): "form": {},
08-07 13:48:50.855: I/response:(14827): "headers": {
08-07 13:48:50.855: I/response:(14827): "Accept-Encoding": "gzip",
08-07 13:48:50.855: I/response:(14827): "Content-Length": "0",
08-07 13:48:50.855: I/response:(14827): "Host": "httpbin.org"
08-07 13:48:50.855: I/response:(14827): },
08-07 13:48:50.855: I/response:(14827): "origin": "222.92.185.206",
08-07 13:48:50.855: I/response:(14827): "url": "http://httpbin.org/delay/6?key1=v1&key2=v2"
08-07 13:48:50.855: I/response:(14827): }</span>
複数のスタンプ、異なるスタンプを押すことができます
次に面白いことをして、getリクエストを開始し(なぜpostを使わないのか、考えないでください.ただ、ここでget方式でリクエストされたウェブサイトの応答時間が長く、反応に間に合うだけです)、クリックして、プログラムを非フロントにします(backまたはhomeでもいいです).
logは貼らないで、あなたはlogがやはり得た内容を出力したことを発見することができて、これは私たちがcancelを研究する原因で、結局私たちはactivityを脱退してスタックから削除することはめったにありません.
リクエストを開始しcancelallすると、このようなlogが見つかります.
08-07 13:59:52.360: I/View(14827): Touch down dispatch to android.widget.Button{42b54520 VFED..C. ........ 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=178.70735, y[0]=50.821228, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487949780, downTime=487949780, deviceId=3, source=0x1002 }
08-07 13:59:52.437: I/View(14827): Touch up dispatch to android.widget.Button{42b54520 VFED..C. ...p.... 0,0-656,97 #7f080002 app:id/btn_getWithoutParams}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=181.7032, y[0]=45.825134, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487949859, downTime=487949780, deviceId=3, source=0x1002 }
08-07 13:59:52.453: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:59:52.453: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:59:52.453: D/dalvikvm(14827): create new thread
08-07 13:59:52.453: D/dalvikvm(14827): new thread created
08-07 13:59:52.453: D/dalvikvm(14827): update thread list
08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: interp stack at 0x60d90000
08-07 13:59:52.454: D/dalvikvm(14827): init ref table
08-07 13:59:52.454: D/dalvikvm(14827): init mutex
08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: created from interp
08-07 13:59:52.454: D/dalvikvm(14827): start new thread
08-07 13:59:52.454: D/dalvikvm(14827): threadid=12: notify debugger
08-07 13:59:52.454: D/dalvikvm(14827): threadid=12 (pool-1-thread-13): calling run()
08-07 13:59:52.455: I/System.out(14827): [CDS]rx timeout:1
08-07 13:59:52.455: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:59:52.455: I/System.out(14827): [CDS]close[60276]
08-07 13:59:52.455: I/System.out(14827): close [socket][/0.0.0.0:60276]
08-07 13:59:52.471: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
08-07 13:59:52.472: I/System.out(14827): propertyValue:true
08-07 13:59:52.473: I/System.out(14827): [socket][12] connection /54.175.222.246:80;LocalPort=56247(10000)
08-07 13:59:52.473: I/System.out(14827): [CDS]connect[/54.175.222.246:80] tm:10
08-07 13:59:52.474: D/Posix(14827): [Posix_connect Debug]Process com.example.testasynchttp :80
08-07 13:59:52.819: I/System.out(14827): [socket][/192.168.255.220:56247] connected
08-07 13:59:52.819: I/System.out(14827): [CDS]rx timeout:10000
08-07 13:59:52.819: I/System.out(14827): [CDS]SO_SND_TIMEOUT:0
08-07 13:59:52.820: I/System.out(14827): >doSendRequest
08-07 13:59:52.821: I/System.out(14827): <doSendRequest
08-07 13:59:53.411: I/View(14827): Touch down dispatch to android.widget.Button{42b59410 VFED..C. ........ 0,540-656,636 #7f080009 app:id/btn_cancelAll}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=307.52844, y[0]=74.38092, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487950831, downTime=487950831, deviceId=3, source=0x1002 }
08-07 13:59:53.476: I/View(14827): Touch up dispatch to android.widget.Button{42b59410 VFED..C. ...p.... 0,540-656,636 #7f080009 app:id/btn_cancelAll}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=305.53122, y[0]=68.38562, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=487950897, downTime=487950831, deviceId=3, source=0x1002 }
08-07 13:59:53.483: V/SettingsProviderInterface(14827): from settings cache , name = sound_effects_enabled , value = 0
08-07 13:59:53.483: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:59:53.484: D/dalvikvm(14827): create new thread
08-07 13:59:53.484: D/dalvikvm(14827): new thread created
08-07 13:59:53.484: D/dalvikvm(14827): update thread list
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: interp stack at 0x60db0000
08-07 13:59:53.484: D/dalvikvm(14827): init ref table
08-07 13:59:53.484: D/dalvikvm(14827): init mutex
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: created from interp
08-07 13:59:53.484: D/dalvikvm(14827): start new thread
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: notify debugger
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13 (Thread-5505): calling run()
08-07 13:59:53.484: D/dalvikvm(14827): create interp thread : stack size=128KB
08-07 13:59:53.484: D/dalvikvm(14827): create new thread
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: exiting
08-07 13:59:53.484: D/dalvikvm(14827): new thread created
08-07 13:59:53.484: D/dalvikvm(14827): update thread list
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: bye!
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: interp stack at 0x60dd2000
08-07 13:59:53.484: D/dalvikvm(14827): init ref table
08-07 13:59:53.484: D/dalvikvm(14827): init mutex
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: created from interp
08-07 13:59:53.484: D/dalvikvm(14827): start new thread
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13: notify debugger
08-07 13:59:53.484: D/dalvikvm(14827): threadid=13 (Thread-5506): calling run()
08-07 13:59:53.485: I/System.out(14827): [CDS]close[56247]
08-07 13:59:53.485: I/System.out(14827): ex:java.net.SocketException: Socket closed
08-07 13:59:53.485: I/System.out(14827): close [socket][/0.0.0.0:56247]
08-07 13:59:53.485: I/System.out(14827): close [socket][/0.0.0.0:56247]
08-07 13:59:53.485: D/dalvikvm(14827): threadid=13: exiting
08-07 13:59:53.485: D/dalvikvm(14827): threadid=13: bye!
08-07 13:59:53.485: V/AsyncHttpRH(14827): Request got cancelled
08-07 13:59:54.987: D/libc-netbsd(14827): getaddrinfo: httpbin.org get result from proxy >>
08-07 13:59:54.987: I/System.out(14827): propertyValue:true
08-07 13:59:54.987: I/System.out(14827): close [socket][/0.0.0.0:-1]
接続が切断されていることがわかります.要求がキャンセルされました.いくつかの要求を開始してみてください.では、saveHandle、cancelrequesthandleをクリックしてみましょう.
tagをもう一度試してみますが、ここではtagをリフレッシュしていません.
後記
この冗長なブログも書き終わりますので、リクエストのキャンセルについてある程度知っておくべきで、いくつかのシーンでコードの中でリクエストのキャンセルを行う意識もあるに違いありません.次は意外にもデータを得た後の処理です.
本文は作者のオリジナルで、転載して原文の住所を添付して、ありがとうございます!
原文住所:http://blog.csdn.net/a774057695/article/details/47337547