Browse Source

Add FAQ for Android resource loading

pull/1598/head
Keghani Kouzoujian 9 years ago
parent
commit
028d2e5fa5
1 changed files with 44 additions and 1 deletions
  1. +44
    -1
      FAQ.md

+ 44
- 1
FAQ.md View File

@ -206,7 +206,50 @@ We'd love to consume machine-readable numbering plan data (assigned ranges,
carrier & geo mappings). If you can connect us with partners in the industry
to achieve this, please do so. Thanks!
## Builds
## Misc
### How do I load libphonenumber resources in my Android app?
#### System considerations
tl;dr: Do not call `PhoneNumberUtil` API on the main thread.
If you get surprising exceptions involving metadata loading, e.g. "missing
metadata" exceptions when the metadata exists, then it's probably because you're
loading resources on the main thread.
Please ensure that you don't call `PhoneNumberUtil` API on the main thread. Not
loading resources in the main thread is the suggested best practice at the
[Android developer
guide](http://developer.android.com/guide/components/processes-and-threads.html),
and will prevent the issue reported in
[#265](https://github.com/googlei18n/libphonenumber/issues/265),
[#528](https://github.com/googlei18n/libphonenumber/issues/528), and
[#819](https://github.com/googlei18n/libphonenumber/issues/819).
#### Optimize loads
You can manage your own resources by supplying your own
[`MetadataLoader`](http://github.com/googlei18n/libphonenumber/blob/master/java/libphonenumber/src/com/google/i18n/phonenumbers/MetadataLoader.java)
implementation to the `PhoneNumberUtil` instance. It is thus possible for your
app to load the resources as Android assets, while libphonenumber loads Java
resources by default. The result is that the files are read as native Android assets
and so optimized for speed.
Here's the sample code for how to do it:
```
PhoneNumberUtil util = PhoneNumberUtil.createInstance(new MetadataLoader() {
@Override
public InputStream loadMetadata(String metadataFileName) {
return Application.getContext().getAssets().open("some/asset/path" + metadataFileName);
}
});
```
You also need to copy the binary metadata files into your app's asset directory, and
automate updating them from upstream. To avoid net increase of app size, remove them
from libphonenumber.
### What about Windows?


Loading…
Cancel
Save