我對Android編程非常新穎,但在其他語言中有一些經驗。我想創建一個像這樣工作的APP。Android - 通過多線程執行不同的功能
的APP是在問我的基於Web /數據庫,服務器每10秒,如果有執行事件的過程。
的基於Web /數據庫,服務器則以事件ID甚至函數名。
- 的APP打開一個新的線程,其執行與ID甚至更好的直接函數名的事件。
我的問題是:
- 這是perfomant?或者這種衝突很容易嗎?
- 是不是僅限於2個線程的過程中或可我連打開每一次的,我要執行的功能一個新的線程?也許是因爲其他功能仍在運行?
如何用返回值執行函數?例如
InputStream in = response.getEntity().getContent(); //Get the data in the entity
public in(void) { // execute a function which got´s the same name as the variable "in" }
結果應該是:一個線程每10秒我的基於Web /數據庫,服務器,詢問是否有一個事件。事件在一個線程內執行,並行工作(同時不會崩潰或甚至陷入困境)。這些線程
示例代碼,將不勝感激。
我的代碼,直到尚未:
公共類服務延伸服務{ 私有靜態最後絃樂TAG = 「則將MyService」;
@Override public IBinder onBind(Intent intent) { return null; } public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); } @Override public int onStartCommand(Intent intent, int flags, int startid) { Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); Thread thread = new Thread(new Runnable() { @Override public void run() { new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("Send GO!"); Device dev = new Device(); dev.getDeviceId(getBaseContext()); dev.getEmail(getBaseContext()); dev.sendDeviceItems(); } }, 0, 10000);//put here time 1000 milliseconds=1 second } }); thread.start(); return Service.START_STICKY; } }
輪詢(每10秒)不是一個好的解決方案,因爲您的應用程序將無法從服務器斷開連接。您應該修改您的需求,並且可能需要端口解決方案,服務器可以在您的應用處理新消息時進行ping操作。附註:我發明了這個詞的性格!我一直在使用它多年。 – danny117 2014-09-30 18:40:38
也是一個不錯的解決方案。我也在考慮這個問題,但是如果手機在一定時間範圍內不能收到短信,是否有可能進入睡眠模式?如果手機是永久聽音,這是真的有效還是浪費電池? – user3325230 2014-09-30 18:49:11