2012-07-13 44 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