commit | e7d878f9d03b616625c8526d39bb4d4053870c37 | [log] [tgz] |
---|---|---|
author | Elias Naur <elias.naur@gmail.com> | Fri Apr 13 18:43:35 2018 +0200 |
committer | Elias Naur <elias.naur@gmail.com> | Tue Apr 17 15:00:01 2018 +0000 |
tree | 50c96b01e4bf544789a0d0e69a931bd694e8da5a | |
parent | 5b452fe89a0b199588ec21f052cd77261b55a83a [diff] |
bind: replace Java finalizers with PhantomReferences Android runs a finalizer watchdog that tracks the running time of finalizers and throws an exception if any runs too long. Our finalizers do very little work and as such are not affected by the timeout. However, there has been reports, for example: https://stackoverflow.com/questions/24021609/how-to-handle-java-util-concurrent-timeoutexception-android-os-binderproxy-fin that the watchdog does not take into account periods where the device goes to sleep in the middle of a finalizer run. So if a given app runs in the background, the Java GC starts a finalizer and the device goes to sleep before it returns, an exception will crash the app if the sleep period extends the watchdog timeout. The problem might be fixed on some newer version of Android, but the problem is reported for as late as Android 6. The suggested workaround is to use PhantomReferences and run a background thread that take dead references off a ReferenceQueue and perform cleanup. This CL builds on the previous CL and splits up the Ref class so Refs only reference counts Java objects, while a new class GoRef tracks Go references. The Go references are wrapped in PhantomReferences that in turn appear on a GoRefQueue to be cleaned up by a background (daemon) Thread. Change-Id: I04e3296b851999c612d3baf6a593cc044c2c5bdd Reviewed-on: https://go-review.googlesource.com/106876 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
The Go mobile repository holds packages and build tools for using Go on mobile platforms.
Package documentation as a starting point:
The Go Mobile project is experimental. Use this at your own risk. While we are working hard to improve it, neither Google nor the Go team can provide end-user support.
This is early work and installing the build system requires Go 1.5. Follow the instructions on golang.org/wiki/Mobile to install the gomobile command, build the basic and the bind example apps.
Contributions to Go are appreciated. See https://golang.org/doc/contribute.html.