You need to decouple updates to the data and to the UI. This is going to be a bit ugly.
1)Don't use a cursor adapter. Load the results from the cursor into some data structure, and make the adapter use that copy of the data. Then when you get new data, create a new copy of that data structure, then save it to the variable the adapter looks at and call notifyDataSetChanged. That way changing the cursor and updating the screen aren't linked.
2)When the service updates the cursor, do not automatically update the listview. Then subclass ListView. When you get an update from the service, save the new data but do not update the listview. Instead, set a flag. In the new ListView subclass, override onTouchEvent so that when a ACTION_UP event occurs, you also check that flag. If the flag is set, turn it false and then notifyDataSetChanged on the adapter. This way, the list will not update until after the user finishes scrolling.