2016-02-19 77 views
-1

将几个服务的一些(不是很大但通常)数据量转移到活动的最佳实践是什么?将数据从服务传输到活动的最佳实践

我用广播接收器在我的MainActivity这样:

private class Receiver extends BroadcastReceiver{ 
    public Receiver() { 
     super(); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     // Receiving and showing received symbols 
     if (intent.getAction() == getString(R.string.key_recognized)) { 
      char key = intent.getCharExtra("key" , '0');     
      MainActivity.this.addText(key); 
     } 

     // Received transfer ending flag 
     if (intent.getAction() == getString(R.string.transfer_ended)) { 
      mServiceWorking = false; 
      MainActivity.this.mToneButton.setText(getText(R.string.send_text)); 
     } 

     // Recieving an array (~2Kb) and drawing it on correspondig ImageView 
     if (intent.getAction() == getString(R.string.spectrum_ready)) { 
      Spectrum spectrum = (Spectrum) intent.getSerializableExtra("spectrum"); 
      if (spectrum != null) { 
       drawSpectrum(spectrum); 
      } 
     } 
    } 

} 

广播节目是从服务sended某种程度上是这样的:

Intent taskIntent = new Intent();  
taskIntent.setAction(getString(R.string.key_recognized)); 
taskIntent.putExtra("key", key); 
this.sendBroadcast(taskIntent); 

这是正常的代码或我的手应该被切断某种方式?)

+0

使用“绑定服务”模式,最有可能“绑定本地服务”一个 – pskink

回答

0

您可以简单使用post的方法从Handler

+0

您能否解释一下更详细一点?也许添加一些代码? – AlbAtNf

1

我不明白为什么通过额外传递数据不是最好的选择。对我而言,是在活动或意图之间传递数据的最安全,最快捷的方式。

+0

另外,[看到这个答案](http://stackoverflow.com/a/12497065/4791726) – AlbAtNf

+0

不错的链接,保存到我的书签。 谢谢老兄 – pamobo0609

+0

不,最快的是“绑定本地服务”模式 – pskink

0

对于最大1MB的正常数据(see this answer),您可以使用额外的intent数据。

对于更大的数据,或者说是不是系列化的数据,你可以存储数据在下列之一:

  • 在文件中。在额外数据中传递URI。
  • 在共享首选项中。
  • 在保存您的数据的特殊类中。将它存储在散列图中,在那里您将密钥传递给您的额外意图数据。

类看起来是这样的:

private static final Map<Long, Object> storage = new HashMap<>(); 

public static synchronized long store(Object tempData){ 
    if(storage.size() < Long.MAX_VALUE) { 
     storage.put(storage.size() + 1l, tempData); 
     return storage.size(); 
    }else{ 
     return -1; 
    } 
} 

商店() - 方法返回一个长值,可以用来识别存储的数据。这种方式比将数据存储在文件中速度更快,并且可以大于1MB。但请记住,你在android中的内存有限,所以不要存储太多或太大的数据。只要您找回它们,就将它们删除。

相关问题