提问人:montooner 提问时间:7/30/2009 最后编辑:Pratik Butanimontooner 更新时间:1/29/2014 访问量:2516
更新原始活动中的集成进度条
Update integrated progress bar in original activity
问:
我一直在尝试让我的进度条视图在我的文件扫描程序应用程序中工作,并且我被活动、服务、线程和处理程序的正确组合所难倒。
结构如下:My Activity 包含一个水平样式的 ProgressBar。在菜单项单击时,我生成了一个 Service,即 onCreate(),这是我希望能够更新进度条的地方。
我的问题是:我错过了什么?
- 活动 “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”.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");
}
答:
坦率地说,您的服务是......问题:onCreate()
- 不要尝试将小部件传递给服务
- 不要尝试从服务修改小部件
- 使用进度条时,请尝试使用后台线程
就 #1 和 #2 而言,问问自己,当用户旋转屏幕(例如,滑出 G1 的键盘)并且服务持有的小部件失效时会发生什么。
就 #3 而言,启动本地服务不会自动创建后台线程。该服务将与活动和所有其他活动在同一线程上运行。如果要在后台线程上完成工作,请使用或创建线程,并使用处理程序或 或 或让后台线程安排在 UI 线程上进行 UI 更新。AsyncTask
post()
postDelayed()
runOnUiThread()
无需执行任何特殊操作,您的程序将在一个线程中运行,即 UI 线程,即操作系统的 UI 线程。在程序中执行的任何操作都将在 UI 线程中运行,除非您创建另一个线程让它运行。该线程需要将任务的进度传达回 UI 线程(使用 Runnable、Handler 和 Thread 类)。然后,主 UI 线程会更新用户在 ProgressBar 上看到的内容。
最好的办法是花一个小时完成 SDK 线程示例。
好的起点是这里和这里。
上一个:为什么线程不停止?
下一个:Android 中的静电安全吗?
评论