我正在開發一個基於套接字的應用程序,在這個應用程序中,我不斷更新房間的狀態,例如多少個燈開關。我有7種這樣的房間,我需要更新每個房間的狀態。使用多個服務或在單個服務中執行所有操作哪個更好?
所以我的問題是我應該爲每個房間創建一個單獨的服務,否則我應該在單個服務中執行所有操作?就性能而言,哪種方式會更方便。
這是我單人房的服務類。
public class UpdateUiService extends Service
{
@Override
public void onCreate() {
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
try {
s = new Socket("192.168.1.19,502);
i = s.getInputStream();
o = s.getOutputStream();
System.out.println("connected");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onStart(Intent intent, int startId) {
handler.removeCallbacks(sendUpdatesToUI);
handler.postDelayed(sendUpdatesToUI, 1000); // 1 second
}
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
DisplayLoggingInfo();
handler.postDelayed(this, Integer.parseInt(interval_dinning));
}
};
private void DisplayLoggingInfo() {
try {
byte[] data1 = new byte[1024], packet1 =
{
(byte) 0x00,(byte) 0x00,(byte) 0x00,
(byte) 0x00,(byte) 0x00,(byte) 0x06,
(byte) 0x01,(byte) 0x01,(byte) 0x00,
(byte) 0x00,(byte) 0x00,(byte) 0x19
};
o.write(packet1);
i.read(data1, 0, 1024);
byte_to_hex = ConversionMethods.bytesToHex(data1).substring(18, 26);
char[] arr = byte_to_hex.toCharArray();
for (int i = 0; i < arr.length - 1; i += 2) {
char temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
swapped_result = new String(arr);
result = ConversionMethods.hexStringToNBitBinary(swapped_result, 32);
int counter_ = 0;
for(int i=0; i<result.length(); i++)
{
if(result.charAt(i) == '1')
{
counter_++;
}
}
status=Integer.toString(counter_);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
intent.putExtra("counter", String.valueOf(++counter));
intent.putExtra("status", status);
sendBroadcast(intent);
}
}
而我開始這項服務,並獲得廣播意圖的活動,我想要顯示此值。這裏是update UI from background service的參考鏈接。
如何使用多線程實現此目的。我的最終目標是讀取套接字並獲得結果。
請指點我一個正確的方向。任何建議和想法將不勝感激。
感謝
你在問什麼?如何更改服務以連接到不同的遠程地址? – Jin35 2013-02-21 12:44:38
@ Jin35我有不同的房間,每個房間都使用不同的IP連接,所以我想知道不同房間的狀態,以上實施僅適用於單間。如果我更改IP,它會給我其他房間的狀態。 – juned 2013-02-21 13:19:47