2013-03-19 31 views
9

Tôi có sử dụng v4 support lib cho FragmentTabHostHiệu suất Fragmenttabhost chậm?

Yêu cầu là khi tôi chuyển sang tab một đến & khác nhau, đó là kêu gọi

onCreateView() & onActivityCreated() mỗi lần.

Đó là lý do hiệu suất mã của tôi chậm.

Vì vậy, bất kỳ giải pháp nào khác? cách tăng hiệu suất trong tab phân đoạn?

+0

Bạn có thể đăng mã của mình từ 'onCreateView()' và 'onActivityCreated()' không? – Darwind

+0

Bạn đã thử setRetainInstance (true) trong các đoạn của mình chưa? – Greensy

Trả lời

1

Tôi đã tìm được giải pháp cho điều đó. Tôi đã chèn tất cả các websevices & mã giao dịch cơ sở dữ liệu khi bật. bởi vì oncreate trong không gọi mỗi khi cho đến khi ondestroy không gọi. & giải pháp khác cũng có sẵn, chúng tôi có thể sử dụng

fragment.show();

& fragment.hide(); phương pháp

+1

Có vẻ như bạn có ý tưởng đúng. Tuy nhiên, mục tiêu cuối cùng là Fragments không cần phải nói chuyện với hoạt động của họ để lấy dữ liệu. Họ nên được cung cấp tất cả các tài liệu tham khảo tài nguyên cần thiết lấy dữ liệu của họ một mình. Sau khi tất cả đó là điểm của mảnh vỡ. Các hoạt động chỉ đơn thuần là các thùng chứa chịu trách nhiệm khởi tạo và điều hướng. – dcow

+0

@saunik Hát: Bạn có thể nói cho tôi biết nơi tôi phải sử dụng fragment.show() và fragment.hide(). Tôi có phải ghi đè lên chức năngTabChanged ?? –

9

Âm thanh giống như mùi thiết kế.

Thiết kế lại mã của bạn để công việc nặng nhọc được thực hiện không đồng bộ. Các mảnh vỡ sẽ có thể được xây dựng nhanh chóng. Nếu có bất kỳ xử lý lớn nào cần được thực hiện để Fragment hiển thị thông tin hữu ích, công việc đó phải được thực hiện trước hoặc không đồng bộ sau khi Fragment được tạo và Fragment cần được thông báo để cập nhật nội dung của nó khi công việc hoàn tất .

+3

Đồng ý. Nếu 'onCreateView()' hoặc 'onActivityCreated()' mất hơn một vài phần nghìn giây kết hợp, bạn đang làm sai. – CommonsWare

+1

thực sự là nguyên nhân chính xác! –

1

Điều đầu tiên bạn nên quan tâm là xem về tính toán/tải một tập dữ liệu lớn phải là địa điểm trên chuỗi công nhân khác với chuỗi giao diện người dùng chính. Tùy chọn tốt nhất để làm điều đó (theo ý kiến ​​của tôi) là sử dụng AsyncTask. Bạn có thể sử dụng thứ gì đó như thế này trong Fragment của bạn:

private class LoadData extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
      // this is the place where you can show 
      // progressbar for example to indicate the user 
      // that there is something which is happening/loading in the background 
     } 

     @Override 
     protected void doInBackground(Void... params){ 

      // that's the place where you should do 
      // 'the heavy' process which should run on background thread 
     } 

     @Override 
     protected void onPostExecute(Void result){ 
      super.onPostExecute(); 
      // you should update your UI here. 
      // For example set your listview's adapter 
      // changes button states, set text to textview and etc. 
     } 
} 

Đây là cách bạn có thể làm cho tab của bạn hoạt động nhanh hơn. Điều này sẽ giúp bạn! :)

0

Là một bổ sung cho Android-Developer: nếu bạn đã sử dụng AsyncTask, hãy nhớ rằng ngay cả khi bạn sử dụng nhiều AsyncTask, chúng được thực hiện trong nền, nhưng tất cả tuần tự! Nếu bạn muốn nhiều chủ đề hơn để xử lý công việc của mình, hãy xem bài đăng này, điều này giải thích hoàn hảo cách đạt được điều đó! Running multiple AsyncTasks at the same time -- not possible?

+1

Điều này phụ thuộc vào phiên bản bạn đang chạy và phần cứng thiết bị. Các nhiệm vụ không đồng bộ được thực hiện trên một nhóm các chủ đề trong đó trường hợp đơn giản là một nhóm gồm 1 luồng công nhân. Đây cũng là mặc định cho một số phiên bản của khung công tác. – dcow