2017-06-15 2 views
1

Wie Android Service mit AsyncTask zu verwenden? Ist es möglich (oder) nicht möglich?Wie verwende ich Service mit AsyncTask?

Ich versuche, Socket-Nachrichtenempfänger zu implementieren. Bin schon UI-Thread und AsyncTask benutze, um Socket-Nachricht Empfänger erstellt, aber meine Anwendung arbeitet langsam, so brauche ich eine andere Lösung.

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

Haben Sie die vorgeschlagene Lösung getestet? – Oleksandr

Antwort

0

würde ich von Square mit WebSocket from okhttp, entwickelt empfehlen, statt eine eigene Implementierung der Verwendung basierend auf AsyncTasks oder Threads.

Sie müssen WebSocket in onCreate() Methode initialisieren und eine WebSocketListener implementieren Nachrichten/Fehler aus der Fassung zu erhalten:

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); 
    } 
} 

prüfen this official square example zu verstehen, wie YourWebSocketListener zu implementieren.

Verwandte Themen