【发布时间】:2011-12-03 00:35:04
【问题描述】:
我正在IntentService 中的数据库中进行操作,并在Activity 中显示CustomProgressBar,但我还想显示百分比值。因此,为此我在 IntentService 中获取百分比值,并在 Activity 中的静态方法中设置该值。但是出现了错误:
CalledFromWrongThreadException:只有创建的原始线程 视图层次结构可以触及其视图。
我不想在 AsyncTask 中执行此操作,因为我不想阻塞 UI,所以我正在使用 IntentService。
这是我的做法。
MyIntentService.java
公共类 MyIntentService 扩展 IntentService { @覆盖 公共无效 onHandleIntent(意图意图) { 更新数据库(); }
public void updateDatabase()
{
resetPercentage(cursor.getCount * 2)
do
{
// do operation for updating the database
// here I update the view everytime a new item is inserted in DB.
int updatedReturn = MyActivity.updatePercentageValue(percentage());
}
while(...)
}
public void resetPercentage(int elementsNum)
{
mUpdatePercentage = 0;
mMaxItems = elementsNum;
}
public int incrementPercentageCounter()
{
return ++mPercentageCounter;
}
public int percentage()
{
int value = (mPercentageCounter/mMaxItems)*100;
return (value > 100) ? 100 : value;
}
}
MyActivity.java
public class MyActivity extends Activity
{
private TextView mMyTextView;
@Override
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
mMyTextView = (TextView) findViewById(R.id.textview);
}
public static int updatePercentageValue(int percentageValue)
{
mMyTextView.setText("" + percentageValue + " %");
return 1;
}
}
关于如何解决此问题或使用我的 IntentService 执行此操作的任何想法,以便 UI 不会被阻塞。
Obs:我也想继续使用IntentService,因为很多事情都已经完成了,我不想从头再来。
谢谢!
【问题讨论】:
-
您在此处的活动代码似乎不完整或与您所拥有的不同。
mMyTextView应该是与mPercentageValueTextView相同的变量吗?那应该是静态变量吗?你真的应该避免对这种事情使用静态访问器。这不是一个好主意。
标签: android