java - Android: Share a background thread between activities using onBind Service -
java - Android: Share a background thread between activities using onBind Service -
guys having problem implementing this. have server running in python. simple messaging protocol. way app connects server using 1 class takes reference activity in order update .this activity's thread. that's good, want have multiple activities, every time open activity , phone call server class, start new thread create socket.
i read , think need implement bound service. have followed bound service documentation , have implemented localbinder, when connection doesn't start thread.
i don't understand should run thread same 1 through of activities ? see code below start in onstartcommand, guess isn't right ?
public class serverservice extends service { private final ibinder binder = new localbinder(); private static final string tag = "serverservice"; private static final int buffer_size = 2048; private socket socket; private static final int serverport = 9999; private static final string serverip = "192.168.0.3"; // 10.0.2.2 boolean terminated = false; private printwriter out = null; private bufferedreader in = null; @override public void oncreate() { super.oncreate(); log.i(tag, "oncreate started"); } @override public int onstartcommand(intent intent, int flags, int startid) { toast.maketext(this, "service started", toast.length_long).show(); thread thread = new thread(runnable); thread.start(); homecoming start_sticky; } @override public void ondestroy() { super.ondestroy(); } @override public ibinder onbind(intent intent) { homecoming binder; } runnable runnable = new runnable() { public void run() { log.i(tag, "running socket thread"); seek { inetaddress serveraddress = inetaddress.getbyname(serverip); socket = new socket(serveraddress, serverport); out = new printwriter(new outputstreamwriter(socket.getoutputstream()), true); in = new bufferedreader(new inputstreamreader(socket.getinputstream())); // maintain listening messages server while (!terminated) { final string message = in.readline(); if (message != null && message != "") { log.i(tag, "message received: " + message); } } // while } // seek grab (unknownhostexception uhe) { log.e(tag, "unknown host\n" + uhe.getstacktrace().tostring()); } grab (exception e) { log.e(tag, "socket failed\n" + e.getmessage()); } disconnect(); log.i(tag, "thread closing"); } }; public void disconnect() { log.i(tag, "disconnecting server"); seek { in.close(); out.close(); } catch(exception e) { // nil } } public class localbinder extends binder { public serverservice getserverinstance() { homecoming serverservice.this; } } } // class serverservice
java android multithreading
Comments
Post a Comment