2011-03-02 37 views
3

我有一个功能,它可以完成所需的时间不同。我想在此功能运行时显示进度对话框。Android SDK - 在后台运行功能

我知道你可以使用'线程'来实现这一点。有人可以指导我做正确的方向吗?

编辑: 这里是我使用的代码:

private class LongOperation extends AsyncTask<String, Void, String> 
{ 
    ProgressDialog dialog; 
    public Context context; 
    @Override 
    protected String doInBackground(String... params) { 
     if (!dialog.isShowing()) 
      dialog.show(); // Just in case 
     return null; 
    } 

    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
    */ 
    @Override 
    protected void onPostExecute(String result) { 
     dialog.dismiss(); 
    } 

    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onPreExecute() 
    */ 
    @Override 
    protected void onPreExecute() 
    { 
     dialog = ProgressDialog.show(context, "Working", "Getting amenity information", true); 
    } 

    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onProgressUpdate(Progress[]) 
    */ 
    @Override 
    protected void onProgressUpdate(Void... values) { 
     // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog 
    } 
} 

这是Asnyc类。用户从菜单中的选项,然后将此执行:

longOperation.execute(""); // Start Async Task 

GetAmenities(Trails.UserLocation); // Long function operation 

回答

6

采取你应该使用AsyncTask用于此目的。见Android developers websiteHow to use AsyncTask

一些示例代码:

private class LongRunningTask extends AsyncTask<Void, Boolean, Boolean> { 

    private ProgressDialog progress; 

    protected void onPreExecute() { 
     progress = ProgressDialog.show(yourContext, "Title", "Text"); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     return true; 
    } 

    protected void onPostExecute(Boolean result) { 
     if(result) { 
      progress.dismiss(); 
     } 
    } 

} 
+0

这是我用过的方法,虽然进度对话框在我的应用中的功能完成后仍然显示出来? – Jamie 2011-03-02 15:14:36

+0

@Jamie:发布您的源代码并编辑您的问题。很难说出为什么你的对话没有源代码就没有出现。 – Wroclai 2011-03-02 15:15:50

+0

基本上,当用户选择一个菜单选项时,应用程序执行AsyncTask,然后该功能开始做它的东西 - 应用程序锁定,而这个任务正在完成,然后继续进行,其中对话框弹出并立即昏暗 – Jamie 2011-03-02 15:45:53

-1
public void onClick(View v) { 
    new Thread(new Runnable() { 
    public void run() { 
     Bitmap b = loadImageFromNetwork(); 

    } 
    }).start(); 
} 

从这里 http://developer.android.com/resources/articles/painless-threading.html

+4

没有!您不能从UI线程外部修改视图。使用'AsyncTask'或'Handler's来做到这一点。 – Matthias 2011-03-02 14:31:06

+0

耶正如你所评论的那样修复。 – madmik3 2011-03-02 14:31:40

+1

就在这个链接的下面,它说不这样做。 – 2011-03-02 14:32:28