光标移动到位置不同步

时间:2014-08-13 05:01:13

标签: android multithreading android-service android-cursor

我有一个光标,在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永远不会改变光标位置,它只是读取光标

1 个答案:

答案 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
            }