2017-06-15 11 views
1

Android ServiceAsyncTaskの使い方は?それは可能か(または)不可能なのでしょうか?AsyncTaskでサービスを使用するには?

私はソケットメッセージ受信機を実装しようとしています。既にUIスレッドであり、AsyncTaskソケットメッセージ受信者の作成に使用されていますが、アプリケーションがゆっくりと動作しているので、他の解決策が必要です。

Runnable mHandlerTask; 
Handler mHandler; 

void init() { 
    mHandler = new Handler(); 
    mHandlerTask = new Runnable(){ 
     @Override 
     public void run(){ 
      Scoketvalue_Reciver(); 
      mHandler.postDelayed(mHandlerTask, INTERVAL); 
     } 
    }; 
} 

private void Scoketvalue_Reciver() { 
    new MainActivity.FileServerAsyncTask(this,info).execute(); 
} 

void startRepeatingTask(){ 
    mHandlerTask.run(); 
} 

void stopRepeatingTask(){ 
    mHandler.removeCallbacks(mHandlerTask); 
} 



public FileServerAsyncTask(Context context , WifiP2pInfo info){ 
      this.context = context; 
      this.info = info; 
     } 

     @Override 
     protected String doInBackground(Void... params){ 
      try{ 
       ServerSocket serverSocket; 
       serverSocket = new ServerSocket(8988); 
       Socket client = serverSocket.accept(); 
       Log.d("vishnu ","getInetAddress ::"+client.getInetAddress()); 
       if(info.isGroupOwner) { 
        Utils.clientipAddress = String.valueOf(client.getInetAddress().getHostAddress()); 
       } 
       BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream())); 
       String st = null; 
       st = input.readLine(); 
       serverSocket.close(); 
       return st; 
      } catch (IOException e) { 
       Log.e(TAG, e.getMessage()); 
       return null; 
      } 
     } 

     /* 
     * (non-Javadoc) 
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
     */ 
     @Override 
     protected void onPostExecute(String result) { 
      if (result != null) { 
       Toast.makeText(context.getApplicationContext(),"value "+result,Toast.LENGTH_SHORT).show(); 
       MainActivity.sentpickedholeid(result); 
//    statusText.setText("File copied - " + result); 
      } 
     } 

     /* 
     * (non-Javadoc) 
     * @see android.os.AsyncTask#onPreExecute() 
     */ 
     @Override 
     protected void onPreExecute() { 
//   statusText.setText("Opening a server socket"); 
     } 
    } 
+0

私が提案した解決策を試しましたか? – Oleksandr

答えて

0

私は広場が開発しWebSocket from okhttpを使用して、代わりのAsyncTasksまたはスレッドに基づいて独自の実装を使用することをお勧めします。 YourWebSocketListenerを実装する方法を理解する

public class YourService extends Service { 
    WebSocket ws; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startWebSocket(); 
    } 

    private void startWebSocket() { 
     Request request = new Request.Builder().url("ws://echo.websocket.org").build(); 
     WebSocketListener listener = new YourWebSocketListener(); 
     ws = client.newWebSocket(request, listener); 
    } 
} 

チェックthis official square exampleを:

あなたはonCreate()方法でのWebSocketを初期化し、ソケットからのメッセージ/エラーを受信するWebSocketListenerを実装する必要があります。

関連する問題