更新原始活动中的集成进度条

Posted

技术标签:

【中文标题】更新原始活动中的集成进度条【英文标题】:Update integrated progress bar in original activity 【发布时间】:2010-11-15 06:28:58 【问题描述】:

我一直在尝试让我的进度条视图在我的文件扫描器应用程序中工作,但我完全被活动、服务、线程和处理程序的正确组合所困扰。

结构如下:我的 Activity 包含一个水平样式的 ProgressBar。单击菜单项时,我会生成一个 Service,它是 onCreate(),我希望能够在其中更新进度条。

我的问题:我错过了什么?

    活动“a”(带有 ProgressBar) 2.“a”.onOptionsItemSelected():生成服务“b” 3.“b”.onCreate():控制“a”中的ProgressBar //这就是我的麻烦

进度条布局(一):

<ProgressBar 
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_
    android:max="100"
    android:progress="0"
    android:secondaryProgress="0" 
    android:layout_ 
    android:layout_marginLeft="10px" 
    android:id="@+id/progress_horizontal"
    />

"a".onOptionsItemSelected(2):

public boolean onOptionsItemSelected(MenuItem item) 

            if (svc == null)
            
                android.util.Log.v("@@@@@@@@@@@@@@@@@@@@@", "starting");
                svc = new Intent(this, DoScan.class);
                // done in "a".onCreate()
                            // hmap = new HashMap();
                    // hmap.put("tv", tv);
                svc.putExtra("hmap", hmap);
                startService(svc);
            
            break;

"b".onCreate() (3):

@Override
public void onCreate() 
    super.onCreate();

    //startThread();
    TextView tv = (TextView) Peekaboo.hmap.get("tv");
    tv.append("cocktail");

【问题讨论】:

我正在寻找的是 Activity 与生成的服务器进行通信的一种方式.. 【参考方案1】:

坦率地说,您的服务的 onCreate() 是...有问题的:

    不要尝试将小部件传递给服务 不要尝试从服务修改小部件 在使用进度条时尽量使用后台线程

关于#1和#2,问问自己当用户旋转屏幕(例如,滑出G1的键盘)时会发生什么,并且服务持有的小部件变得无效。

就#3而言,启动本地服务不会自动创建后台线程。该服务将与活动和所有其他活动在同一线程上运行。如果您希望在后台线程上完成工作,请使用 AsyncTask 或创建线程并使用 Handler 或 post()postDelayed()runOnUiThread() 让后台线程安排在 UI 上发生 UI 更新线程。

【讨论】:

【参考方案2】:

无需做任何特别的事情,您的程序就在一个线程中运行,即 UI 线程、操作系统的 UI 线程。程序中所做的任何事情都在 UI 线程中运行,除非您创建另一个线程供其运行。该线程需要将任务的进度传达回 UI 线程(使用 Runnable、Handler 和 Thread 类)。然后主 UI 线程更新用户在 ProgressBar 上看到的内容。

最好的办法是花一个小时完成 SDK 线程示例。

好的起点是here 和here。

【讨论】:

以上是关于更新原始活动中的集成进度条的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Windows 7 编写进度条以在任务栏上进行自我更新?

vc6.0里MFC进度条如何使用

如何在service中同步更新通知activity中的进度条

如何使用界面更新异步任务中的进度条

如何更新异步任务中的进度条

如何更新引导进度条。