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

问题描述:

我一直在试图让我的进度条视图在我的文件扫描程序应用程序中工作,而且我完全被活动,服务,线程和处理程序的适当组合所困扰。更新原始活动中的集成进度条

下面是结构:我的活动包含水平风格的ProgressBar。在菜单项上单击,我产生了一个Service,onCreate(),这是我希望能够更新进度条的地方。

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

  1. 活动 “一个”(与进度)
                2. “一” .onOptionsItemSelected():菌种服务 “b” 的
                                  3.“b”.onCreate():控制“a”中的ProgressBar // h ERE是在那里我有我的麻烦

布局进度条(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" 
    /> 

“一” .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"); 
} 
+0

我正在寻找的是一种活动与产生的服务器进行通信的方式。 – montooner 2009-07-30 01:11:09

若要生硬,您的服务的onCreate()是...有问题:

  1. 不要试图部件传递给服务
  2. 不要试图从服务修改控件
  3. 不要试图用进度条

在工作时使用后台线程#1和#2的条款,问自己当用户旋转屏幕时会发生什么(例如,滑出G1的键盘),并且该服务所持有的小部件变得无效。

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

没有做任何特别的事情,你的程序运行在一个线程,UI线程,OS的UI线程中。你的程序中所做的任何事都在UI线程中运行,除非你创建了另一个线程来运行它。该线程需要将任务的进度传递回UI线程(使用Runnable,Handler和Thread类)。然后主UI线程更新用户在ProgressBar上看到的内容。

要做的最好的事情是花一个小时,并通过SDK线程示例工作。

好的地方开始是herehere