Lúc đầu, tạo lớp bài viết của bạn, sử dụng AsyncTask hoặc IntentService như sau ...
public class PostIntentService extends IntentService implements PostTask.Observer {
private int counter = 0;
private int retry = 2;
private Data mData;
public PostIntentService() {
super("PostIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
mData = (Data) intent.getSerializableExtra("data");
// send updating status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "updating");
sendBroadcast(i);
execute();
counter++;
}
@Override
public void onSuccessPost(String result) {
// send success status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "success");
sendBroadcast(i);
}
@Override
public void onFailedPost(String result) {
if (counter < retry) {
execute();
counter++;
}
else {
// send failed status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "failed");
i.putExtra("data", mData);// for reproduct
sendBroadcast(i);
}
}
private void execute() {
PostTask task = new PostTask(this);
task.execute();
}
}
Tại thứ hai, tạo ra lớp học của bạn (mở rộng BroadcastReceiver) mà nhận được mục đích khi một bài xong.
public class PostBroadcastReceiver extends BroadcastReceiver {
public static final String ACTION_RESPONSE = "com.example.android.intent.action.POST_PROCESSED";
private static final int POST_REQUEST = 100;
private Observer mObserver;
public PostBroadcastReceiver(Observer observer) {
mObserver = observer;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra("status").equals("updating")) {
}
else if (intent.getStringExtra("status").equals("success")) {
if (mObserver != null) {
mObserver.onPostFinished();
}
}
else if (intent.getStringExtra("status").equals("failed")) {
if (mObserver != null) {
mObserver.onPostFailed();
}
}
}
public interface Observer {
public void onPostFinished();
public void onPostFailed();
}
}
Đăng ký dịch vụ này trong tệp kê khai của bạn.
<service android:name=".PostIntentService" />
Đăng ký việc tiếp nhận này trong onTạo Hoạt động chính của bạn.
IntentFilter filter = new IntentFilter(PostBroadcastReceiver.ACTION_RESPONSE);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new PostResponseReceiver(this);
registerReceiver(receiver, filter);
Và thực hiện phương pháp sau trong hoạt động chính của bạn.
public void onPostFinished() {
Log.d("onPostFinished", "onPostFinished");
}
public void onPostFailed() {
Log.d("onPostFailed", "onPostFailed");
}
Đừng quên Hủy đăng ký người nhận này trong khiHãy hủy hoạt động chính của bạn.
unregisterReceiver(receiver);
Cuối cùng, thực hiện chuyển trong Hoạt động đăng nhập của bạn.
Intent intent = new Intent(this, PostIntentService.class);
intent.putExtra("data", mData);
startService(intent);
Bạn có thể dễ dàng tạo ra một BroadcastReceiver cho điều này, mặc dù bạn cũng có thể tạo Hoạt động đăng nhập chuyên dụng, giữ cho người dùng chờ đợi sau đó một lần nhiệm vụ hoàn thành hoặc khởi động một Hoạt động mới hoặc 'kết thúc()' một hiện tại để đi trở lại. –
Bạn đã thử 'Handler' chưa? nếu không, hãy thử một lần. –