multithreading - Android background service to connect TCP server and handle message -


according google example, write android client connection protocol based on tcp socket server can send , receive information , works good. want become background service these transactions, after left application can notify me message in time, think couple of days, without success, can give me help? grateful!

mainactivity

    public class mainactivity extends activity implements         handler.callback, chatfragment.messagetarget {      public static final string tag = "rolingbaby";      public static final int message_read = 0x400 + 1;     public static final int message_send = 0x400 + 2;     public static final string server_url = "192.168.191.2";     public static final int server_port = 7838;      private handler handler = new handler(this);     private chatfragment chatfragment;      public handler gethandler() {         return handler;     }      public void sethandler(handler handler) {         this.handler = handler;     }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          try {             inetaddress address = inetaddress.getbyname(server_url);             log.d(tag, "connected success!");             new mytask1(((chatfragment.messagetarget)    this).gethandler(),                     address).execute();         } catch (unknownhostexception e) {             e.printstacktrace();         }         chatfragment = new chatfragment();         getfragmentmanager().begintransaction()                 .add(r.id.container, chatfragment, "trans")                 .commit();      }      @override     public boolean handlemessage(message msg) {         switch (msg.what) {             case message_read:                 byte[] readbuf = (byte[]) msg.obj;                 // construct string valid bytes in buffer                 string readmessage = new string(readbuf, 0, msg.arg1);                 log.d(tag, readmessage);                 (chatfragment).pushmessage("rec: " + readmessage);                 break;              case message_send:                 object obj = msg.obj;                 (chatfragment).setchatmanager((chatmanager) obj);          }         return true;     }       @override     protected void onpause() {         super.onpause();         finish();     } } 

pivotal code in chatfragment

public interface messagetarget {     public handler gethandler(); }  public void setchatmanager(chatmanager obj) {     chatmanager = obj; }  public void pushmessage(string readmessage) {     adapter.add(readmessage);     adapter.notifydatasetchanged(); } 

mytask

    public class mytask extends asynctask<void, void, void>{      private static final string tag = "clientsockethandler";     private handler handler;     private chatmanager chat;     private inetaddress maddress;     private static final int timeout = 5000;      public mytask(handler handler, inetaddress serveraddress) {         this.handler = handler;         this.maddress = serveraddress;     }      @override     protected void onpreexecute() {         super.onpreexecute();      }      @override     protected void doinbackground(void... params) {         socket socket = new socket();         try {             socket.bind(null);             socket.connect(new inetsocketaddress(maddress.gethostaddress(),                     mainactivity.server_port), timeout);             log.d(tag, "launching i/o handler");             chat = new chatmanager(socket, handler);             new thread(chat).start();         } catch (ioexception e) {             e.printstacktrace();             try {                 socket.close();             } catch (ioexception e1) {                 e1.printstacktrace();             }         }         return null;     }      public chatmanager getchat() {         return chat;     }  } 

chatmanager

    public class chatmanager implements runnable {      private socket socket = null;     private handler handler;      public chatmanager(socket socket, handler handler) {         this.socket = socket;         this.handler = handler;     }      private inputstream istream;     private outputstream ostream;     private static final string tag = "chathandler";     public  static string  readmessage;      @override     public void run() {         try {             istream = socket.getinputstream();             ostream = socket.getoutputstream();             byte[] buffer = new byte[1024];             int bytes;             handler.obtainmessage(mainactivity.message_send, this)                     .sendtotarget();              while (true) {                 try {                     // read inputstream                     bytes = istream.read(buffer);                     if (bytes == -1) {                         break;                     }else{                         readmessage = new string(buffer, "utf-8");                     }                      // send obtained bytes ui activity                     log.d(tag, "rec:" + string.valueof(buffer));                     handler.obtainmessage(mainactivity.message_read,                             bytes, -1, buffer).sendtotarget();                  } catch (ioexception e) {                     log.e(tag, "disconnected", e);                 }             }         } catch (ioexception e) {             e.printstacktrace();         } {             try {                 socket.close();             } catch (ioexception e) {                 e.printstacktrace();             }         }     }      public void write(byte[] buffer) {         try {             ostream.write(buffer);         } catch (ioexception e) {             log.e(tag, "exception during write", e);         }     }  } 


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -