„Радимо како је предвиђено“

Познато је да Андроидова функција приступачности узрокује кашњење корисничког интерфејса. Да ли је то грешка или карактеристика? Зашто настаје? Ми у КСДА истражујемо основни узрок.

Лепота Андроид-а лежи у много различитих начина на које апликације трећих страна могу да комуницирају са системом. Апликације за управљање лозинкама као што су ЛастПасс пружају могућност аутоматског уноса релевантних података о корисничком имену/лозинки на скоро сваки екран за пријаву. Тект Аиде омогућава вам да значајно скратите време слања порука пријатељима тако што вам омогућава да креирате макрое за проширење текста. Нативе Цлипбоард смањује гњаважу са честим пребацивањем између апликација за копирање великих количина текста омогућавајући вам да двапут додирнете било које поље за унос да бисте приказали међуспремник. Ко може да заборави Греенифи, можда апликација број 1 коју ентузијасти највише препоручују, која држи лажне позадинске апликације под контролом и тако може да продужи трајање батерије? Коначно, иако мање упознат са већином корисника, постоји

АутоИнпут - Таскер додатак дизајниран да аутоматизује додиривање екрана, унос текста, покрете превлачења и још много тога. Све ове апликације служе за веома различите случајеве употребе, али свака од ових апликација се ослања на веома погрешно схваћен део основне Андроид функционалности: Приступачност.

Просечном кориснику Андроид-а може изгледати чудно да многе од ових невероватних функција које користи ваша омиљена апликација контролише подешавање испод приступачност подмени. Прављење апликације приступачан обично би требало да значи да је Андроид апликација употребљива за особу са инвалидности. Па зашто у свету ЛастПасс, Нативе Цлипбоард, Тект Аиде, Греенифи или АутоИнпут имају приступачност услуга? Штавише, зашто се чини да омогућавање услуге приступачности узрокују толико заостајања корисничког интерфејса? Чини се да није важно коју верзију Андроида користите – било да је Андроид 5.0 Лоллипоп или Андроид 7.0 Ноугат - јер кашњење узроковано одређеним услугама приступачности може утицати на ваше искуство. Једноставно решење за овај проблем је да једноставно онемогућите услуге приступачности које сте можда омогућили – али тиме губимо толико корисних функционалности. Друго решење је да поднесете захтев Гоогле-у да „поправи“ заостајање у приступачности Андроид-а, али Гоогле тврди да је приступачност Андроид-а ради како је предвиђено. Разговарали смо са неколико програмера који су блиско упознати са услугама приступачности и истражили како функционалност функционише, а ми смо ту да тестирамо ту тврдњу: да ли је заостајање за приступачност Андроид-а грешка или је то карактеристика?


Разумевање приступачности за Андроид

Као што можете замислити по имену, Приступачност је углавном намењена програмерима да обезбеде додатну функционалност свим корисницима са инвалидитетом. Заиста, брзи поглед на званичне странице документације за Приступачност открива да Гоогле има прилично узак поглед на то које врсте услуга треба да пружају услуге приступачности.

Многи корисници Андроид-а имају различите способности које од њих захтевају да комуницирају са својим Андроид уређајима на различите начине. То укључује кориснике који имају визуелна, физичка или старосна ограничења која им спречавају да у потпуности виде или коришћење екрана осетљивог на додир и корисника са оштећењем слуха који можда неће моћи да перципирају звучне информације и упозорења.

Андроид пружа функције приступачности и услуге које помажу овим корисницима да се боље крећу својим уређајима лако, укључујући претварање текста у говор, хаптичку повратну информацију, навигацију покретима, куглицу за праћење и тастатуру за усмеравање навигација.

Гоогле'с Одговори, који долази унапред инсталиран на сваком Андроид телефону, одличан је пример како би требало да изгледа 'типична' услуга приступачности. Гласовни приступ чини приступачност корак даље и омогућава скоро потпуну контролу над вашим телефоном користећи само ваш глас. Али чињеница да је Гоогле намеравао да се услуге приступачности користе на овај начин то не спречава програмере да их имплементирају на који год начин желе - а то је управо оно што програмери имају Готово. Управо због начина на који ради Приступачност чини ову функцију невероватно корисно за кориснике са или без инвалидитета.

Да бисмо мало поједноставили ствари, ево основног прегледа како функционише приступачност Андроид-а. Програмер креира Услуга приступачности који се претплаћује на разне Догађаји приступачности које систем шаље Сервису у зависности од тога да ли су одређени критеријуми испуњени или не. Када су све услуге онемогућене у оквиру Подешавања --> Приступачност, Андроид не прикупља нити шаље никакве догађаје приступачности. Али када корисник почне да омогућава услуге приступачности, Андроид ће почети да надгледа и прикупља само оне Догађаје приступачности које захтева Услуга приступачности. На пример, услуга приступачности која је претплаћена на догађај приступачности ТИПЕ_ВИНДОВ_ЦОНТЕНТ_ЦХАНГЕД биће обавештен од стране система сваки пут да дође до промене у тренутном прозору. Позван још један догађај приступачности ТИПЕ_ВИЕВ_ЦЛИЦКЕД пали сваки пут корисник кликне на неку врсту дугмета.

Демонстрација приступачности за Андроид. У овом видеу сам омогућио апликацију Таскер пратити за промене у наслову прозора. Ово захтева омогућавање Таскер-ове услуге приступачности. Ово можете поновити тако што ћете креирати нови профил у Таскер-у са контекстом 'Догађај' постављеним на 'Вариабле Сет' и изабрати %ВИН као променљиву за надгледање. Укупно је снимљен овај приближно 1 минутни видео 107 промена у тренутном прозору.

Овакве врсте догађаја приступачности се јављају са великом учесталошћу током нормалне интеракције корисника. Па замислите шта се дешава када корисник омогућава вишеструке услуге приступачности који захтевају да се активирају догађаји приступачности високе фреквенције. Тако је - заостајање. Да би ово ублажили, програмери могу уже да дефинишу које врсте догађаја приступачности имају Услуга треба да реагује иу ком контексту, као што је могућност да се услуга ограничи само да реагује када у одређене апликације или да ограничи бирачки период између догађаја. Али осим тога, количина режијских трошкова коју генерише услуга приступачности углавном зависи од какве врсте догађаја приступачности претплати се на. У суштини, неће свака услуга приступачности изазвати кашњење. Једна услуга приступачности која захтева догађај високе фреквенције може да изазове кашњење, посебно ако наведена Услуга је повезана са другом Услугом која захтева да буде још један високофреквентни догађај праћени.


Зароните дубоко у приступачност уз АПК рушење

Као што можете видети из видео снимка постављеног изнад, услуга приступачности која прати промене у садржају прозора може довести до прилично приметних промена у перформансама корисничког интерфејса због огромне количине снимљених догађаја приступачности које је покренуо система. Међутим, прилично је тешко тачно одредити колике трошкове узрокује одређена услуга приступачности. Надгледање ЛогЦат-а генерално вас неће одвести никуда, јер се догађаји приступачности штампају на ЛогЦат-у само ако програмер услуге приступачности тако одлучи. Срећом, отац свих Андроид услуга приступачности, АутоИнпут, ради управо то. А излаз ЛогЦат-а је тачно онолико неуредан колико бисте замислили.

АутоИнпут не крије истину од нас. Трошкови узроковани апликацијом могу бити прилично огромни у зависности од тога које догађаје надгледате. Али ови трошкови су неопходни да би апликација функционисала. Да би АутоИнпут пресрео сваки притисак на тастер, сваки покрет на екрану, свако ажурирање корисничког интерфејса и сваки притисак на дугме, потребе за праћење одговарајућих Догађаја приступачности. Без ових догађаја, АутоИнпут не може да се повеже са системом и обезбеди скоро неограничену аутоматизацију корисничког интерфејса коју тренутно дозвољава. Дакле, све функције АутоИнпута имају савршен смисао у контексту приступачности. Али за друге апликације, морамо да погледамо мало дубље да бисмо разумели како се рукује њиховим услугама приступачности.

Услуга приступачности атрибути дефинисани су у ан КСМЛ датотека ресурса у оквиру АПК-а. Стога, можемо извршити ан АПК деардовн у апликацији са услугом приступачности да бисте открили атрибуте услуге. Свака апликација функционише другачије, па ћу покушати да објасним како се атрибути њихове услуге односе на одређену функцију коју обавља.

Нативе Цлипбоард

Нативе Цлипбоард је мој избор када су у питању менаџери међуспремника. Ако тражите веома прилагодљив менаџер међуспремника, Нативе Цлипбоард је прилично одлична апликација. Чак има компоненту Кспосед Модуле која вам омогућава да дуго притиснете дугме 'Налепи' да бисте отворили менаџер клипборда! Нажалост, ако немате приступ Кспосед Фрамеворк-у (као што је сваки корисник на Ноугат-у) онда ћете морати да се решите за омогућавање услуге приступачности која ће вам омогућити да двапут додирнете било који унос текста да бисте приказали међуспремник менаџер. Ево шта то подразумева.


"@string/access_decs"
android: accessibilityEventTypes="typeViewClicked|typeViewFocused|typeViewLongClicked|typeWindowStateChanged"
android: accessibilityFeedbackType="feedbackGeneric"
android: notificationTimeout="100"
android: accessibilityFlags="flagReportViewIds|flagRetrieveInteractiveWindows"
android: canRetrieveWindowContent="true"
xmlns: andro />

Услуга приступачности изворног међуспремника захтева покретање Догађаја приступачности сваки пут када се кликне на приказ, када се дуго кликне, фокусира или ако дође до промене стања прозора. Без приступа изворном коду, не могу тачно да кажем како Нативе Цлипбоард ради, али је вероватно да Нативе Цлипбоард чека да стање прозора назначи да је мекана тастатура тренутно отворена, а затим прати да ли се додирује унос поље. Апликација има период гласања од 100 мс, тако да је то дефинитивно довољно брзо да у суштини одмах реагује на промене у видљивости меке тастатуре, као и на двоструке додире. Ово може довести до неких додатних трошкова корисничког интерфејса кад год корисник користи мекану тастатуру да унесе било који текст, што може довести до кашњења.

Греенифи

Следећи је свима омиљени уштеда батерије, Греенифи. Греенифи користи Догађаје приступачности за напајање својих функција које нису роот.


"@string/accessibility_service_description"
android: settingsActivity="com.oasisfeng.greenify.accessibility.AccessibilitySettings"
android: accessibilityEventTypes="typeAnnouncement|typeNotificationStateChanged|typeWindowStateChanged"
android: accessibilityFeedbackType="feedbackGeneric" android: notificationTimeout="0"
android: accessibilityFlags="flagReportViewIds"
android: canRetrieveWindowContent="true"
xmlns: andro />

Користи промене у стању прозора да би одредио када се екран телефона искључио и захтева да одложите активацију закључаног екрана променом опције у безбедносним поставкама. Греенифи ће такође примати догађаје типа Најава или Нотифицатион Стате промењено, што је друго непотребно на Андроид 5.0+ уређајима захваљујући функцији Приступ обавештењу. Она ће, међутим, и даље примати ове догађаје без обзира на ту чињеницу. Греенифи само по себи не би требало да изазове велике трошкове, али могућност остаје.

Нова Лаунцхер

Вероватно најпопуларнија апликација за покретање треће стране на тржишту, Нова Лаунцхер је одличан пример апликације која користи услугу приступачности са минималним или без додатних трошкова. Једини разлог постојања Сервиса је помоћ одређеним уређајима у извођењу покрета.


"@string/accessibility_service_description"
android: accessibilityEventTypes=""
android: packageNames="com.teslacoilsw.launcher"
android: accessibilityFeedbackType=""
android: notificationTimeout="10000"
android: canRetrieveWindowContent="false"
xmlns: andro />

Као што видите, у КСМЛ датотеци није дефинисан догађај приступачности. Све што се помиње је назив пакета - Нова Лаунцхер. Оно што се овде дешава је решење за одређене уређаје за које покрети Нова Лаунцхер-а не раде. Ова услуга ће обезбедити Нова Лаунцхер све догађаје приступачности покренуте из само у оквиру Нова Лаунцхер-а. Звучи чудно, али очигледно је то начин да поправите покрете на почетном екрану Нове ако ваш уређај не ради са њима. Пошто ово захтева само Догађаје од саме Нове, Услуга представља врло мало трошкова.

ЛастПасс

Коначно, можда најзлогласнија услуга приступачности која узрокује заостајање (вероватно због своје огромне популарности) - ЛастПасс. Питање заостајања унутар ЛастПасс-а је тако приметно да друштво има службеника Страница са честим питањима која описује проблем. Као што наводи честа питања, не можете ништа учинити у вези са кашњењем осим да онемогућите услугу. Зашто се ЛастПасс-ова услуга чини тако страшном када је у питању заостајање? Хајде да погледамо атрибуте услуге.


"@string/accessibility_service_description"
android: accessibilityEventTypes="typeViewFocused|typeWindowContentChanged"
android: accessibilityFeedbackType="feedbackGeneric"
android: notificationTimeout="200"
android: accessibilityFlags="flagReportViewIds"
android: canRetrieveWindowContent="true"
android: canRequestEnhancedWebAccessibility="true"
xmlns: andro />

Истина је да у ЛастПасс сервису нема ништа необично. Захтева само два типа догађаја за праћење - ТИПЕ_ВИЕВ_ФОЦУСЕД и ТИПЕ_ВИНДОВ_ЦОНТЕНТ_ЦХАНГЕД. То ради зато што треба да зна када се садржај апликације/веб странице промени/дође у фокус, а затим преузима тренутни садржај прозора да би потражио било која поља за унос лозинке. Али пошто услуга то стално ради на два изузетно често активирана догађаја приступачности, то доводи до кашњења. То је несрећна истина.


Живети са заостатком

Када смо први пут прочитали да Гоогле затвара извештаје о грешкама о кашњењу у приступачности јер је функција „радила како је предвиђено“, били смо једнако збуњени и узнемирени као и многи од вас. Али уместо да прихватимо објашњење за истинску вредност, одлучили смо да сами испитамо ствар како бисмо утврдили истину. Дакле, када је Гоогле-ов радник на страници са извештајем о грешци рекао ово:

Здраво, овај проблем је упоран у Андроид издањима. Такође ће увек бити додатног кашњења када је услуга приступачности омогућена. То је зато што уређај, поред стандардног корисничког интерфејса, пружа много информација услугама приступачности како би оне могле да пруже алтернативно корисничко искуство тим корисницима.

Схватили смо зашто ово је намеравано понашање. Апликације које користе услуге приступачности на начин који Гоогле није намеравао увек ће имати неке додатне трошкове; овај трошак је једноставно неопходан за пружање услугама са мноштвом информација које Андроид Аццессибилити покреће у позадини. Заостајање Андроид-а са услугама приступачности је није грешка, већ карактеристика. Функција са којом ћемо морати да живимо осим ако се цео систем не преради, и не могу да замислим како би се то урадило да се прилагоди толико различитих скупова функција из толико различитих апликација.

У најмању руку, ЛастПасс програмери не би ово прихватили. Њихови програмери су сарађивали са Цхромиум програмерима да оптимизовати подршку за приступачност, можда омогућавањем ЛастПасс подршке коришћењем АПИ-ја уместо да омогући услугу приступачности. Оптимизација око трошкова услуга приступачности је једна од могућности, али као што су многи програмери имплицитно приметили на Цхромиум форумима, то је једноставно трака која неће решити чињеницу да ненамерно коришћење услуга приступачности може довести до заостајање.


Посебно хвала програмеру АутоИнпута, јоаомгцд, што је одговорио на многа моја питања у вези са приступачношћу!