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

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

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

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

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

进度条布局(一):

<ProgressBar 
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_height="wrap_content"
    android:max="100"
    android:progress="0"
    android:secondaryProgress="0" 
    android:layout_width="300px" 
    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 与生成的服务器进行通信的一种方式..

标签: android multithreading service android-activity android-progressbar


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    好的起点是herehere

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2012-11-10
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多