代码之家  ›  专栏  ›  技术社区  ›  montooner

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

  •  1
  • montooner  · 技术社区  · 15 年前

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

    结构如下:我的活动包含一个水平样式的ProgressBar。在单击菜单项时,我生成一个服务,onCreate(),这是我希望能够更新进度条的地方。

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

    1. 活动“a”(带ProgressBar)
      2个。”a).onOptionsItemSelected():生成服务“b”
      3个。”b“.onCreate():控制“a”中的ProgressBar/这里是我遇到麻烦的地方

    进度条布局(1):

    <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”。选定的选项项(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");
    }
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   CommonsWare    15 年前

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

    1. 不要试图将小部件传递给服务
    2. 不要试图修改服务中的小部件
    3. 使用进度条时,请尝试使用后台线程

    至于1和2,问问你自己,当用户旋转屏幕(例如,滑出G1的键盘)时,会发生什么情况,而服务所持的小部件将变为无效。

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

        2
  •  0
  •   Will Ganeshgm7    15 年前

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

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

    好的开始是 here here .