我有一个光标,在onCreate of Service期间加载。我有一个光标的吸气剂。
当光标移动到某个位置时,我打电话,
Log.e(TAG, "try moving to pos " + String.valueOf(position));
if(getCursor().moveToPosition(position)){
setCursorPosition();
if(getCursorPosition() == getCursor().getPosition())
Log.e(TAG,"\t\t Moved to position \t\t");
sendBroadcast(new Intent(intentAction));
}
在Broadcst接收器中,我接收广播,并操纵光标来更新一些UI元素
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction() == intentAction){
Log.e(TAG,"currentTitlefrom cursor:"+MyService.getCursor().getPosition()+": :"+currentTitle);
... //ui updates here
}
}
在日志中,我看到了
08-13 03:10:10.920: E/MyService(19548): try moving to pos 3
08-13 03:10:10.940: E/MyService(19548): Moved to postion
08-13 03:10:24.620: E/MainActivity(19548): currentTitlefrom cursor:2: :American Woman
实际上,实际光标移动到我想要的位置。我很确定,因为我的服务按预期工作。但主要活动报告了以前唯一的位置,即变化没有同步反映。
如何解决这个问题?
注意:1 getCursor是一个返回静态Cursor
元素的静态函数
注意:2 MyService在主UI线程上运行,而不是在不同的线程上运行。因此,getCursor().moveToPosition(position)
和MyService.getCursor().getPosition()
都只在UI线程上运行。
编辑:我的应用模式是
UI永远不会改变光标位置,它只是读取光标
答案 0 :(得分:0)
在intent extra中传递光标位置。所以改变你的
sendBroadcast(new Intent(intentAction))
到
Intent in = new Intent(intentAction);
in.putExtra("cursorPosition", position);
sendBroadcast(in);
以广播onReceive
方式接收
if(intent.getAction() == intentAction){
int cursorPosition = intent.getIntExtra("cursorPosition", 0);
Log.e(TAG,"currentTitlefrom cursor:" String.valueOf(cursorPosition ) +": :"+currentTitle);
... //ui updates here
}