Мы разрабатываем приложение AR, используя Unity с Ar-foundation, для устройств Android. Наше приложение использует основы дополненной реальности и выполняет вывод нейронной сети, используя tflite 1.14 внутри пакета .aar.
Мой код выглядит следующим образом:
void Update() {
if (!Thread1.IsAlive && !Thread2.IsAlive)
{
ProcessTaskResultsIfAvailables();
Thread1 = new Thread(FunctionToPerform);
Thread2 = new Thread(FunctionToPerform);
Thread1.Start();
Thread2.Start();
}
}
void FunctionToPerform()
{
//use of Android JNI.
var result = myJavaObject.Call<AndroidJavaObject>("tfliteTaskThatTakesALotOfTime");
}
Когда пара выводов закончена, два новый поток создается для двух новых задач, и т. д. c ...
Однако это довольно медленно, две задачи всегда выполняются в двух параллельных потоках. Вывод занимает 5 секунд, хотя в собственном приложении android java это займет в среднем 600 мс. Телефон холодный, поэтому мы не думаем, что он связан с перегревом телефона.
При профилировании приложения мы видим пары потоков tflite. зеленый график - использование ЦП приложением, синий - общее использование ЦП системой:
Однако при приостановке приложения (перейдя в диспетчер задач android или вернувшись к например, в главном меню) и возобновляя его, приложение неожиданно набирает производительность:
Мы можем видеть лучшее использование процессора, поток намного короче, как минимум, до 800 мс до медленно движется в среднем до 1300 мс через несколько минут. Эти показатели в 4 раза лучше.
Это доказывает, что приложение не вызывало восторга до паузы,
Я попытался автоматически запустить Android Activity поверх него, но, как ни странно, оно только уменьшило время вывода до 2500 мс.
Мы сожалеем о том, что просим пользователя сделать паузу и перезапустить приложение при его запуске, и хотели бы найти способ обеспечить наилучшую доступную производительность во время запуска, не останавливая его.
Есть ли способ сделать это? Спасибо за потраченное время.
Характеристики: Unity версия: 2019.2.8f1 Android SDK 28. (P ie 9.0) На Samsung galaxy S9. Tflite 1.14 Arfoundation 2.1.4 Использование фонового моно-скриптинга