2012-07-13 55 views
0

我有不確定的進度條,當我從互聯網上讀取數據時顯示。要顯示/去除進度條,我使用其可見性。當我打開進度條選項時,我的應用程序從網上讀取數據15分鐘,當我刪除進度條代碼時,它持續20秒。它可能會讓我的應用程序變得如此緩慢?與不確定進度條的android性能問題

main_activity.xml:

<TableRow 
    android:gravity="center_horizontal" 
    android:layout_marginTop="10dip" 
    android:visibility="gone" 
    android:id="@+id/progress_bar" 
    > 

    <ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:maxWidth="30dip" 
    android:minWidth="30dip" 
    android:maxHeight="30dip" 
    android:minHeight="30dip" 
    android:indeterminate="true" 
    android:layout_gravity="center_horizontal" 
    /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/searchingInProgress" 
     android:layout_gravity="center|center_horizontal" 
     /> 

</TableRow> 

第一片段java代碼(這觸發連接至淨通過執行類FindSongTask,它從繼承的AsyncTask):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button searchButton = (Button) findViewById(R.id.searchButton); 

    searchButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      EditText searchQueryField = (EditText) findViewById(R.id.searchQueryField); 
      String searchQuery = searchQueryField.getText().toString(); 

      if (searchQuery.length() > 0 && (currentQuery == null || !currentQuery.equals(searchQuery))) { 
       new FindSongTask().execute(searchQuery); 
       currentQuery = searchQuery; 

       findViewById(R.id.progress_bar).setVisibility(View.VISIBLE); 
       v.setEnabled(false); 

      } 

      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(searchQueryField.getWindowToken(), 0); 



     } 
    }); 

} 

第二片段(這之後執行連接到網絡):

instance.findViewById(R.id.searchButton).setEnabled(true); 
findViewById(R.id.progress_bar).setVisibility(View.GONE); 
super.onPostExecute(result); 
+0

請發佈與ProgressBar相關的代碼。 – Erol 2012-07-13 20:54:41

+0

如果你能分享相關的代碼,這真的很有幫助。沒有看到代碼,我所能做的只是猜測。儘管如此,[This](http://www.example.com/)可能與您的查詢有關。 – Pulkit2692 2012-07-13 19:50:39

回答

0

嘗試像這樣...

public class MyActivity extends Activity{ 

    ProgressDialog pd; 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     setContentView(R.layout.main); 
    } 

    @Override 
    public void onPause() 
    { 
      //don't leak a window 
     super.onPause(); 
     if(pd != null) 
      pd.dismiss(); 
    } 

    //no networking allowed on main thread 
    private class NetworkingTask extends AsyncTask<String,String,String>{ 
     int result; 

     @Override 
     protected void onPreExecute(){ 
      pd = ProgressDialog.show(Login.this,"","Display message...", true,false); 
     } 

     @Override 
     protected String doInBackground(String...strings){ 
      //perform networking here 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String unused){ 
      //check result 
      pd.dismiss(); 
      Intent intent = new Intent(MyActivity.this,NextActivity.class); 
      startActivity(intent); 
     } 
    } 
} 
+0

我剛剛做了,我在編輯時寫了什麼。 – kspacja 2012-07-13 22:24:05

+0

你編輯了什麼?我沒有看到任何改變......我向你展示的方式確保窗口只在操作過程中可見。 AsyncTasks是做處理這樣的對話框.. – Joel 2012-07-13 22:28:11

+0

我的意思是編輯我的問題。 – kspacja 2012-07-14 07:59:06