The socket operation in BosswaveClient constructor causes
android.os.NetworkOnMainThreadException
when called in Android main thread.
Should the socket be moved to another thread (like the beginning of the listener thread?)? Or should application developer avoid creating BosswaveClient in the main thread?
Android log:
D/libc-netbsd: [getaddrinfo]: hostname=xxxxx; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd: [getaddrinfo]: ai_addrlen=0; ai_canonname=xxxxx; ai_flags=4; ai_family=0
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.berkeley.cs.sdb.cellmate, PID: 9339
java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.berkeley.cs.sdb.cellmate/edu.berkeley.cs.sdb.cellmate.MainActivity}: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
at java.net.InetAddress.lookupHostByName(InetAddress.java:426)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:255)
at java.net.InetAddress.getAllByName(InetAddress.java:218)
at java.net.Socket.tryAllAddresses(Socket.java:111)
at java.net.Socket.<init>(Socket.java:180)
at java.net.Socket.<init>(Socket.java:152)
at edu.berkeley.cs.sdb.bosswave.BosswaveClient.<init>(BosswaveClient.java:50)
at edu.berkeley.cs.sdb.cellmate.MainActivity.initBosswaveClient(MainActivity.java:482)
at edu.berkeley.cs.sdb.cellmate.MainActivity.onCreate(MainActivity.java:419)
at android.app.Activity.performCreate(Activity.java:6021)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Ref: https://github.com/SoftwareDefinedBuildings/bw2android/blob/master/src/main/java/edu/berkeley/cs/sdb/bosswave/BosswaveClient.java#L50
The socket operation in BosswaveClient constructor causes
when called in Android main thread.
Should the socket be moved to another thread (like the beginning of the listener thread?)? Or should application developer avoid creating BosswaveClient in the main thread?
Android log:
Ref: https://github.com/SoftwareDefinedBuildings/bw2android/blob/master/src/main/java/edu/berkeley/cs/sdb/bosswave/BosswaveClient.java#L50