2011-12-01 37 views

Trả lời

2

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.
2

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

4

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.

1

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.

+0

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

1

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 
} 

} 
Các vấn đề liên quan