Also tune the priority value for better results.
setListAdapter(new IndexAdapter(index));
setListAdapter(new IndexAdapter(index));
+ // Pre-load the Transliterator (will spawn its own thread)
+ TransliteratorManager.init(new TransliteratorManager.Callback() {
+ @Override
+ public void onTransliteratorReady() {
+ uiHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ onSearchTextChange(searchView.getQuery().toString());
+ }
+ });
+ }
+ }, DictionaryApplication.threadBackground);
+
// Pre-load the collators.
new Thread(new Runnable() {
public void run() {
// Pre-load the collators.
new Thread(new Runnable() {
public void run() {
- android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
+ android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
final long startMillis = System.currentTimeMillis();
try {
final long startMillis = System.currentTimeMillis();
try {
- TransliteratorManager.init(new TransliteratorManager.Callback() {
- @Override
- public void onTransliteratorReady() {
- uiHandler.post(new Runnable() {
- @Override
- public void run() {
- onSearchTextChange(searchView.getQuery().toString());
- }
- });
- }
- });
-
for (final Index index : dictionary.indices) {
final String searchToken = index.sortedIndexEntries.get(0).token;
final IndexEntry entry = index.findExact(searchToken);
for (final Index index : dictionary.indices) {
final String searchToken = index.sortedIndexEntries.get(0).token;
final IndexEntry entry = index.findExact(searchToken);
//static public final boolean USE_COLLATOR = !android.os.Build.FINGERPRINT.equals("Samsung/cm_tassve/tassve:4.4.4/KTU84Q/20150211:userdebug/release-keys");
static public final boolean USE_COLLATOR = true;
//static public final boolean USE_COLLATOR = !android.os.Build.FINGERPRINT.equals("Samsung/cm_tassve/tassve:4.4.4/KTU84Q/20150211:userdebug/release-keys");
static public final boolean USE_COLLATOR = true;
+ static public final TransliteratorManager.ThreadSetup threadBackground = new TransliteratorManager.ThreadSetup() {
+ @Override
+ public void onThreadStart() {
+ // THREAD_PRIORITY_BACKGROUND seemed like a good idea, but it
+ // can make Transliterator go from 20 seconds to 3 minutes (!)
+ android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
+ }
+ };
+
// Static, determined by resources (and locale).
// Unordered.
static Map<String, DictionaryInfo> DOWNLOADABLE_UNCOMPRESSED_FILENAME_NAME_TO_DICTIONARY_INFO = null;
// Static, determined by resources (and locale).
// Unordered.
static Map<String, DictionaryInfo> DOWNLOADABLE_UNCOMPRESSED_FILENAME_NAME_TO_DICTIONARY_INFO = null;
public void onCreate() {
super.onCreate();
Log.d("QuickDic", "Application: onCreate");
public void onCreate() {
super.onCreate();
Log.d("QuickDic", "Application: onCreate");
- TransliteratorManager.init(null);
+ TransliteratorManager.init(null, threadBackground);
staticInit(getApplicationContext());
languageButtonPixels = (int) TypedValue.applyDimension(
staticInit(getApplicationContext());
languageButtonPixels = (int) TypedValue.applyDimension(
}
private String normalizeToken(final String searchToken) {
}
private String normalizeToken(final String searchToken) {
- if (TransliteratorManager.init(null)) {
+ if (TransliteratorManager.init(null, null)) {
final Transliterator normalizer = normalizer();
return normalizer.transliterate(searchToken);
} else {
final Transliterator normalizer = normalizer();
return normalizer.transliterate(searchToken);
} else {
private static boolean starting = false;
private static boolean ready = false;
private static boolean starting = false;
private static boolean ready = false;
+ private static ThreadSetup threadSetup = null;
private static LRUCacheMap<String, Transliterator> cache = new LRUCacheMap<String, Transliterator>(4);
// Whom to notify when we're all set up and ready to go.
private static LRUCacheMap<String, Transliterator> cache = new LRUCacheMap<String, Transliterator>(4);
// Whom to notify when we're all set up and ready to go.
- public static synchronized boolean init(final Callback callback) {
+ public static synchronized boolean init(final Callback callback, final ThreadSetup setupCallback) {
if (ready) {
return true;
}
if (ready) {
return true;
}
}
if (!starting) {
starting = true;
}
if (!starting) {
starting = true;
+ threadSetup = setupCallback;
new Thread(init).start();
}
return false;
new Thread(init).start();
}
return false;
private static final Runnable init = new Runnable() {
@Override
public void run() {
private static final Runnable init = new Runnable() {
@Override
public void run() {
+ synchronized (TransliteratorManager.class) {
+ if (threadSetup != null) threadSetup.onThreadStart();
+ }
System.out.println("Starting Transliterator load.");
final String transliterated = get(Language.en.getDefaultNormalizerRules()).transliterate("Îñţérñåţîöñåļîžåţîờñ");
if (!"internationalization".equals(transliterated)) {
System.out.println("Starting Transliterator load.");
final String transliterated = get(Language.en.getDefaultNormalizerRules()).transliterate("Îñţérñåţîöñåļîžåţîờñ");
if (!"internationalization".equals(transliterated)) {
+ public interface ThreadSetup {
+ void onThreadStart();
+ }
+
public interface Callback {
void onTransliteratorReady();
}
public interface Callback {
void onTransliteratorReady();
}