Tôi có hoạt động 'Activity1' và cũng có một hoạt động khác có tên 'Activity2'. 'Activity2' được tải khi nhấp vào nút trong 'Activity1'. Tôi muốn hiển thị hộp thoại tiến trình cho đến khi hoạt động mới được tải. bạn có thể vui lòng cho tôi xem đoạn code để làmHiển thị hộp thoại tiến trình trước khi bắt đầu một hoạt động mới
Trả lời
có hai cách để
tiếp cận đầu tiên sử dụng async công tác
Nếu bạn đang làm nhiệm vụ nặng nề ví dụ như tải dữ liệu từ máy chủ hoặc phân tích cú pháp xml trong trường hợp sử dụng AsynTask <> Nếu bạn muốn gọi ActivityB từ ActivityA sau đó
* step-1 * tạo lớp AsyncTask.viết tất cả các nhiệm vụ nền bên doBackground()
phương pháp và sau khi hoàn thành nhiệm vụ mà bạn muốn gọi một hoạt động mà ghi mã bên onPostExecute()
bài phương thức execute
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
public class LoadingDataFromServer extends AsyncTask {
Context currentContext = null;
boolean isCancelled = false;
public LoadingDataFromServer(Context context) {
currentContext = context;
}
@Override
protected void onPreExecute() {
if (DashboardActivity.progressBarLayout != null) {
DashboardActivity.progressBarLayout.setVisibility(View.VISIBLE);
// Log.i(TAG,".....Now make progress bar visible.....");
}
super.onPreExecute();
}
@Override
protected Object doInBackground(Object... params) {
// do background processing
try {
// do background tasks eg sever communication
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
// progressDialog.dismiss();
// call second Activity
Intent i = new Intent(currentContext, com.ActvityB.class);
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
isCancelled = true;
super.onCancelled();
}
}
bước 2 Trong hoạt động fro nơi bạn muốn nhảy đến hoạt động mới (ví dụ như trong ActivityA) gọi thực thi() của AsynTask
new LoadingDataFromServer(context).execute(null);
cách tiếp cận thứ hai
- Hộp thoại tiến trình hiển thị đầu tiên.
- tạo một chuỗi để thực hiện tất cả các tác vụ nền. khi thread hoàn nhiệm vụ sau đó hủy bỏ hộp thoại tiến độ và gọi các hoạt động tiếp theo
hoặc
- khi chủ đề complets nhiệm vụ sau đó gọi hoạt động tiếp theo vượt qua đối tượng (hộp thoại tiến trình) này và bên trong đó hoạt động mới bỏ qua hộp thoại này.
vâng điều này bằng cách sử dụng AsynTask <> bạn có thể nhận được kết quả của bạn
trong OnPreExecute Hiện thoại Progress của bạn, trong OndoInBackground chạy hoạt động của bạn, trong onPostExecute tháo thoại của bạn
lấy ý tưởng Get Concept
Hiển thị hộp thoại tiến trình trong phương thức onCreate
của Activity2, sau đó thực hiện tải tất cả thời gian trong AsyncTask. Trong phương thức onPostExecute()
của AsyncTask, bỏ qua hộp thoại tiến trình.
Các câu trả lời khác (sử dụng AsynTask) là chính xác, nhưng câu hỏi bạn cần tìm hiểu là điều gì gây ra sự chậm trễ của bạn. Có phải điều gì đó đang xảy ra ở phần cuối của Activity1 hoặc một cái gì đó đang diễn ra ở phần đầu Activity2. Nếu bạn đang thực hiện một số thao tác trước khi bắt đầu Activity2 thì hãy làm theo lời khuyên của Last Warrior hoặc Ted Hopp ... nếu bạn có một quá trình tải dài trong Activity2 thì bạn sẽ cần phải bắt đầu hộp thoại tiến trình như điều đầu tiên xảy ra trênTạo Activity2 và sau đó di chuyển bất cứ thứ gì đang lấy tài nguyên xử lý vào một AsynTask (hoặc chỉ một luồng khác) ở đó.
Tôi đoán trong trường hợp không chắc rằng cả A1 và A2 đều yêu cầu thêm thời gian vào cuối và trước mỗi lần tương ứng, bạn sẽ cần phải mở và đóng hộp thoại tiến trình ... Tôi không nghĩ có cách nào để giữ một mở ở phía trước khi bạn di chuyển từ hoạt động này sang hoạt động khác.
bạn có thể làm điều đó thông qua AsyncTAsk. Mà mã dành thời gian để thực hiện chỉ cần đặt đó vào
doInBackground()
phương pháp ghi đè AsyncTask và
startActivity (mục đích) ---- chỉ cần đặt vào onPostExcute()
protected class InitTask extends AsyncTask<Context, Integer, Integer> {
@Override protected Integer onPreExcute(Context... params) {
//assign progressbar here
}
@Override protected Integer doInBackground(Context... params) {
//do all the stuffs here
return super.doInBackground(params)
} @Override protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//update progress bar
}
@Override protected void onPostExecute(Integer result) {
super.onPostExecute(result);
//start activity here
}
}
- 1. Hộp thoại tiến trình trong khi bắt đầu hoạt động mới
- 2. cách hiển thị thanh tiến trình trước khi phát video
- 3. Hộp thoại tiến trình về hoạt động mở
- 4. hiển thị thanh tiến trình trong hộp thoại cảnh báo
- 5. Hộp thoại tiến trình Android
- 6. Hiển thị thanh tiến trình khi Hoạt động đang tải
- 7. Hiển thị hộp thoại in trước khi in
- 8. TransactionTooLargeException khi bắt đầu Hoạt động mới
- 9. Cách hiển thị hộp thoại tiến trình trong khi trang HTML được tải trong WebView
- 10. Hoạt động trênBackPress không hiển thị hộp thoại cảnh báo
- 11. Làm cách nào để hiển thị hộp thoại jquery trước khi toàn bộ trang được tải?
- 12. Hiển thị hộp thoại để chọn không gian làm việc trong khi nó bắt đầu
- 13. android - Cách hiển thị hộp thoại sau khi hoạt động kết thúc
- 14. Tải hoạt động trong nền trước khi hiển thị nó
- 15. WPF hiển thị hộp thoại trước cửa sổ chính
- 16. Django - hiển thị tiến trình hành động
- 17. hộp thoại tiến trình với asynctask
- 18. Bắt đầu hoạt động mà không hiển thị nó
- 19. Hộp thoại Android hiển thị lại sau khi Hoạt động được tạo lại
- 20. Xóa nhiệm vụ và bắt đầu một hoạt động mới
- 21. Hiển thị spinner tiến trình (làm mới) trên ActionBar?
- 22. Hộp thoại tiến trình Swing không bị chặn
- 23. Bắt đầu hoạt động khi khởi động
- 24. Bắt đầu Hoạt động mới từ lớp Hoạt động phi
- 25. Bắt đầu IntentService từ Hoạt động và làm mới Hoạt động khi IntentService được hoàn thành
- 26. Cách hiển thị hộp thoại onbeforeunload khi thích hợp?
- 27. spinner hiển thị như hộp thoại
- 28. Thanh tiến trình không cập nhật trong khi hoạt động
- 29. bắt đầu một hoạt động mới trong onCreate chỉ hoạt động với độ trễ
- 30. Android - hiển thị văn bản ở giữa thanh tiến trình
thực sự trong hoạt động 2, tôi đang phân tích cú pháp một json. Vì vậy, sự chậm trễ là trong hoạt động thứ hai của chính nó. Cảm ơn. – Matthew