我一直在研究一种方法来同步多个设备(如iPad或Mac)之间存储在iPhone应用程序中的核心数据。 在iOS上使用Core Data的同步框架并不多(如果有的话)。 不过,我一直在想下面这个概念: 对本地核心数据存储进行更改,并保存更改。 (a)如果设备处于联机状态,它会尝试将更改集发送到服务器,包括发送更改集的设备的设备标识。 (b)如果变更集没有到达服务器,或者设备不在线,应用程序会将变更集添加到队列中,以便在联机时发送。 坐在云中的服务器将接收到的特定变更集合与其主数据库合并。 在云服务器上合并更改集(或更改集队列)之后,服务器会使用某种轮询系统将所有这些更改集推送到在服务器上注册的其他设备。 (我以为使用苹果的Push服务,但显然根据评论,这不是一个可行的系统。) 有什么我想要考虑的幻想? 我看过REST框架,如ObjectiveResource , Core Resource和RestfulCoreData 。 当然,这些都是和Ruby on Rails一起工作的,我并没有把它绑在里面,但是这是一个开始的地方。 我对我的解决scheme的主要要求是: 任何改变都应该在后台发送,而不要暂停主线程。 它应该使用尽可能less的带宽。 我曾考虑过一些挑战: 确保服务器上连接了不同设备上不同数据存储的对象ID。 也就是说,我将拥有一个对象ID和设备ID的表格,这些表格通过对存储在数据库中的对象的引用进行绑定。 我将有一个logging(DatabaseId [此表唯一的],ObjectId [唯一的整个数据库中的项],Datafield1,Datafield2),ObjectId字段将引用另一个表,所有对象:(ObjectId,DeviceId,DeviceObjectId)。 然后,当设备推送一个更改集时,它将从本地数据存储中的核心数据对象传递设备Id和objectId。 然后,我的云服务器将检查AllObjects表中的objectId和设备Id,并在初始表中查找要更改的logging。 所有更改都应该有时间戳,以便可以合并。 该设备将不得不轮询服务器,而不用消耗太多的电池。 如果/从服务器接收到更改,本地设备也将需要更新内存中的任何内容。 还有什么我在这里失踪? 我应该考虑什么样的框架来实现这一点?
private double value; public synchronized void setValue(double value){ this.value=value; } public double getValue(){ return this.value; } 在上面的例子中,是否有任何使getter同步的点?
可能重复: C#中各种线程同步选项之间的区别是什么? 监视器和C#中互斥量有什么区别? 何时使用监视器以及何时在C#中使用互斥锁?
List<String> list = Collections.synchronizedList(new ArrayList<String>()); synchronized (list) { list.add("message"); } 这个块“synchronized(list){}”真的需要在这里吗?
我有两个同时运行的AJAX请求的问题。 我有一个正在导出数据到XSLX的PHP脚本。 这个操作需要很多时间,所以我正试图向用户显示进度。 我正在使用AJAX和数据库方法。 其实,我很确定它曾经工作,但我不明白为什么,它不再在任何浏览器工作。 新的浏览器有什么改变吗? $(document).ready(function() { $("#progressbar").progressbar(); $.ajax({ type: "POST", url: "{$BASE_URL}/export/project/ajaxExport", data: "type={$type}&progressUid={$progressUid}" // unique ID I'm using to track progress from database }).done(function(data) { $("#progressbar-box").hide(); clearInterval(progressInterval); }); progressInterval = setInterval(function() { $.ajax({ type: "POST", url: "{$BASE_URL}/ajax/progressShow", data: "statusId={$progressUid}" // the same uinque ID }).done(function(data) { data = jQuery.parseJSON(data); $("#progressbar").progressbar({ value: parseInt(data.progress) […]
我正在尝试为我的应用程序创build一个帐户,在那里我可以使我的联系人对我的帐户,如Facebook,Viber,WhatsApp等我希望我的帐户在设置的帐户部分也可见。 有任何想法吗? 我GOOGLE了很多,但找不到正确的答案从哪里开始。 请帮忙。 我试图创build一个帐户如下。 这导致我的错误。 Account account = new Account("Title", "com.package.nom"); String password = "password"; AccountManager accountManager = (AccountManager) MainPanel.this.getSystemService( ACCOUNT_SERVICE); accountManager.addAccountExplicitly(account, password, null);
我知道同步方法和同步块之间的区别,但我不确定关于同步块部分。 假设我有这个代码 class Test { private int x=0; private Object lockObject = new Object(); public void incBlock() { synchronized(lockObject) { x++; } System.out.println("x="+x); } public void incThis() { // same as synchronized method synchronized(this) { x++; } System.out.println("x="+x); } } 在这种情况下使用lockObject和使用这个锁作为区别? 对我来说似乎是一样的.. 当你决定使用同步块时,你如何决定哪个对象是锁?
我有一个Java程序,每20秒执行一次Spring Qquartz。 有时只需要几秒钟的时间来执行,但随着数据变得更大,我相信它会运行20秒或更长时间。 在一个实例仍在执行的情况下,如何防止Quartz触发/触发作业? 在数据库上执行相同操作的2个作业不会那么好。 有什么办法可以做一些同步吗?
以下代码是否设置为正确同步synchronizedMap上的调用? public class MyClass { private static Map<String, List<String>> synchronizedMap = Collections.synchronizedMap(new HashMap<String, List<String>>()); public void doWork(String key) { List<String> values = null; while ((values = synchronizedMap.remove(key)) != null) { //do something with values } } public static void addToMap(String key, String value) { synchronized (synchronizedMap) { if (synchronizedMap.containsKey(key)) { synchronizedMap.get(key).add(value); } else { List<String> […]
何时应该使用信号量,何时应该使用条件variables(CondVar)?