Skip to content

Commit f1d8b07

Browse files
committed
commit changes.
N/A Signed-off-by: liuchonghui <liuchonghui@xiaomi.com>
1 parent c6dfc10 commit f1d8b07

File tree

7 files changed

+166
-70
lines changed

7 files changed

+166
-70
lines changed

async2sync/samples/app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ dependencies {
55
compile "com.android.support:support-v4:${SUPPORT_V4_VERSION}"
66
compile "com.android.support:recyclerview-v7:${COMPILE_SUGGEST_SDK_VERSION}"
77
compile 'com.android.support:multidex:1.0.1'
8-
compile 'tools.android:interface:1.1.1'
8+
compile 'tools.android:async2sync:1.0.0'
99
}
1010

1111
android {

async2sync/samples/app/src/main/AndroidManifest.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="tool.imageloadercompact.app"
3+
package="tool.async2sync.app"
44
android:versionCode="1"
55
android:versionName="1.0.0">
66

@@ -31,14 +31,14 @@
3131
android:targetSdkVersion="19" />
3232

3333
<application
34-
android:name="tool.imageloadercompact.android.MainApplication"
34+
android:name="tool.async2sync.android.MainApplication"
3535
android:allowBackup="true"
3636
android:icon="@mipmap/ic_launcher"
3737
android:label="@string/app_name"
3838
android:supportsRtl="true"
3939
android:theme="@style/AppTheme">
4040
<activity
41-
android:name="tool.imageloadercompact.activity.MainActivity"
41+
android:name="tool.async2sync.activity.MainActivity"
4242
android:configChanges="orientation|keyboardHidden|screenSize"
4343
android:screenOrientation="portrait"
4444
android:theme="@android:style/Theme.Light.NoTitleBar">
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package tool.async2sync.activity;
2+
3+
import android.app.Activity;
4+
import android.os.Bundle;
5+
import android.os.Handler;
6+
import android.os.Looper;
7+
import android.text.TextUtils;
8+
import android.view.View;
9+
import android.widget.Button;
10+
import android.widget.TextView;
11+
import android.widget.Toast;
12+
13+
import tool.async2sync.app.R;
14+
import tools.android.async2sync.Connection;
15+
import tools.android.async2sync.Packet;
16+
import tools.android.async2sync.PacketCollector;
17+
import tools.android.async2sync.PacketFilter;
18+
import tools.android.async2sync.RandomIdGenerator;
19+
20+
public class MainActivity extends Activity {
21+
22+
Connection mConnection = new Connection(5000L); // 设定5秒无结果超时
23+
24+
@Override
25+
protected void onCreate(Bundle savedInstanceState) {
26+
super.onCreate(savedInstanceState);
27+
setContentView(R.layout.activity_main);
28+
29+
final Button btn1 = (Button) findViewById(R.id.btn1);
30+
final TextView btn1ret = (TextView) findViewById(R.id.btn1_ret);
31+
final Button btn2 = (Button) findViewById(R.id.btn2);
32+
final TextView btn2ret = (TextView) findViewById(R.id.btn2_ret);
33+
34+
btn1.setOnClickListener(new View.OnClickListener() {
35+
@Override
36+
public void onClick(final View view) {
37+
final long start = System.currentTimeMillis();
38+
Payload payload = new Payload();
39+
payload.title = "start@" + start;
40+
asyncTestFunction(payload, new PayloadResult() {
41+
@Override
42+
public void onResult(final Payload payload) {
43+
// 异步处理后,获得结果,在UI线程刷新控件
44+
new Handler(Looper.getMainLooper()).post(new Runnable() {
45+
@Override
46+
public void run() {
47+
String msg = payload.title;
48+
Toast.makeText(view.getContext(), msg, Toast.LENGTH_LONG).show();
49+
btn1ret.setText(msg);
50+
}
51+
});
52+
}
53+
});
54+
}
55+
});
56+
57+
btn2.setOnClickListener(new View.OnClickListener() {
58+
@Override
59+
public void onClick(final View view) {
60+
final long start = System.currentTimeMillis();
61+
String packetId = RandomIdGenerator.randomId(3);
62+
Payload payload = new Payload();
63+
payload.identify = packetId;
64+
payload.title = "start@" + start;
65+
// sendPacket启动异步任务,然后线程一直等,一直等到nextResult获取结果(或超时)
66+
PacketFilter filter = new PacketIDFilter(payload.identify);
67+
PacketCollector collector = mConnection.createPacketCollector(filter);
68+
sendPacket(payload);
69+
final Packet<Payload> packet = collector.nextResult(mConnection.getConnectionTimeOut());
70+
collector.cancel();
71+
// 由于一直运行在主线程,这里直接刷新处理
72+
// 界面上按钮会卡住,这只是为了说明同步线程执行,方便演示,实际使用不建议
73+
if (packet != null && packet.getContent() != null) {
74+
Payload resulPayload = packet.getContent();
75+
String msg = resulPayload.title;
76+
Toast.makeText(view.getContext(), msg, Toast.LENGTH_LONG).show();
77+
btn2ret.setText(msg);
78+
}
79+
}
80+
});
81+
}
82+
83+
public interface PayloadResult {
84+
void onResult(Payload payload);
85+
}
86+
87+
public void asyncTestFunction(final Payload payload, final PayloadResult callback) {
88+
// 模拟一个异步任务,通过输入,异步处理,返回处理后的结果
89+
new Thread(new Runnable() {
90+
@Override
91+
public void run() {
92+
try {
93+
Thread.sleep(2000L);
94+
} catch (Exception e) {
95+
e.printStackTrace();
96+
}
97+
payload.title += "|end@" + System.currentTimeMillis();
98+
if (callback != null) {
99+
callback.onResult(payload);
100+
}
101+
}
102+
}).start();
103+
}
104+
105+
public class Payload {
106+
public String identify;
107+
public String title;
108+
}
109+
110+
class PacketIDFilter implements PacketFilter {
111+
112+
String packetId;
113+
114+
public PacketIDFilter(String packetId) {
115+
this.packetId = packetId;
116+
}
117+
118+
@Override
119+
public boolean accept(Packet packet) {
120+
if (packet == null) {
121+
return false;
122+
}
123+
if (!(packet.getContent() instanceof Payload)) {
124+
return false;
125+
}
126+
Payload payloadContent = (Payload) packet.getContent();
127+
if (TextUtils.isEmpty(payloadContent.identify)) {
128+
return false;
129+
}
130+
return payloadContent.identify.equals(this.packetId);
131+
}
132+
}
133+
134+
public void sendPacket(Payload payload) {
135+
asyncTestFunction(payload, new PayloadResult() {
136+
@Override
137+
public void onResult(Payload payload) {
138+
Packet<Payload> newPacket = new Packet<Payload>();
139+
newPacket.setContent(payload);
140+
mConnection.processPacket(newPacket);
141+
}
142+
});
143+
}
144+
}

async2sync/samples/app/src/main/java/tool/imageloadercompact/android/MainApplication.java async2sync/samples/app/src/main/java/tool/async2sync/android/MainApplication.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package tool.imageloadercompact.android;
1+
package tool.async2sync.android;
22

33
import android.app.Application;
44
import android.content.Context;

async2sync/samples/app/src/main/java/tool/imageloadercompact/activity/MainActivity.java

-62
This file was deleted.

async2sync/samples/app/src/main/res/layout/activity_main.xml

+16-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
android:id="@+id/btn1"
1010
android:layout_width="wrap_content"
1111
android:layout_height="wrap_content"
12-
android:layout_centerInParent="true"
13-
android:text="test interface"/>
12+
android:text="test1"/>
1413
<TextView
1514
android:id="@+id/btn1_ret"
1615
android:layout_alignBottom="@+id/btn1"
@@ -19,5 +18,20 @@
1918
android:layout_height="wrap_content"
2019
android:textSize="20sp"
2120
/>
21+
22+
<Button
23+
android:id="@+id/btn2"
24+
android:layout_width="wrap_content"
25+
android:layout_height="wrap_content"
26+
android:layout_below="@+id/btn1"
27+
android:text="test2"/>
28+
<TextView
29+
android:id="@+id/btn2_ret"
30+
android:layout_alignBottom="@+id/btn2"
31+
android:layout_toRightOf="@+id/btn2"
32+
android:layout_width="wrap_content"
33+
android:layout_height="wrap_content"
34+
android:textSize="20sp"
35+
/>
2236
</RelativeLayout>
2337

async2sync/settings.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
include ':async2sync:async2sync'
2-
//include ':samples:app' // 用compile方式使用async2sync
2+
include ':samples:app' // 用compile方式使用async2sync
33
include ':samples:app2' // 用compile project方式使用async2sync

0 commit comments

Comments
 (0)