„Dirba kaip numatyta“

click fraud protection

Yra žinoma, kad „Android“ pritaikymo neįgaliesiems funkcija sukelia vartotojo sąsajos delsą. Ar tai klaida, ar tai funkcija? Kodėl tai atsiranda? Mes, XDA, tiriame pagrindinę priežastį.

„Android“ grožis slypi daugelyje skirtingų būdų, kuriais trečiųjų šalių programos gali sąveikauti su sistema. Slaptažodžių tvarkyklės programos, pvz LastPass suteikia galimybę automatiškai tiekti atitinkamus vartotojo vardo / slaptažodžio duomenis beveik bet kuriame prisijungimo ekrane. Teksto pagalbininkas leidžia žymiai sutrumpinti savo draugams susirašinėjimo laiką, nes galite sukurti teksto išplėtimo makrokomandas. Gimtoji iškarpinė sumažina sunkumų, susijusių su dažnai perjungiant programas, norint nukopijuoti didelius teksto kiekius, nes galite dukart bakstelėti bet kurį įvesties lauką, kad būtų rodoma iškarpinė. Kas gali pamiršti Žalinti, ko gero, populiariausia entuziastų programa, kuri kontroliuoja nesąžiningas fono programas ir gali pailginti akumuliatoriaus veikimo laiką? Galiausiai, nors ir mažiau pažįstamas daugumai vartotojų, yra

Automatinė įvestis - „Tasker“ papildinys, skirtas automatizuoti ekrano bakstelėjimus, teksto įvedimą, braukimo gestus ir dar daugiau. Visos šios programos skirtos labai skirtingiems naudojimo atvejams, tačiau kiekviena iš šių programų remiasi labai neteisingai suprasta pagrindinės „Android“ funkcijos dalimi: Prieinamumas.

Paprastam „Android“ naudotojui gali atrodyti keista, kad daugelis šių nuostabių funkcijų, kurias naudoja jūsų mėgstamiausia programa, yra valdomos nustatant prieinamumas submeniu. Programėlės kūrimas prieinama paprastai turėtų reikšti, kad „Android“ programą gali naudoti asmuo, turintis negalia. Taigi kodėl pasaulyje yra LastPass, Native Clipboard, Text Aide, Greenify arba AutoInput prieinamumas paslauga? Be to, kodėl atrodo, kad prieinamumo paslaugos įgalinimas sukelti tiek daug vartotojo sąsajos vėlavimo? Panašu, kad nesvarbu, kokią „Android“ versiją naudojate – ar tai būtų Android 5.0 Lollipop arba Android 7.0 Nougat – nes tam tikrų pritaikymo neįgaliesiems paslaugų sukeltas vėlavimas gali turėti įtakos jūsų patirčiai. Paprastas šios problemos sprendimas yra tiesiog išjungti pritaikymo neįgaliesiems paslaugas, kurias galbūt įjungėte, tačiau tai darydami prarandame tiek daug naudingų funkcijų. Kitas sprendimas yra pateikti peticiją „Google“, kad „ištaisytų“ „Android“ pasiekiamumo delsą, tačiau „Google“ teigia, kad „Android“ prieinamumas yra dirba kaip numatyta. Kalbėjomės su keliais kūrėjais, gerai susipažinusiais su pritaikymo neįgaliesiems paslaugomis, ir ištyrėme, kaip veikia šios funkcijos, ir esame čia, kad patikrintume šį teiginį: ar „Android“ pasiekiamumo delsa yra klaida, ar tai funkcija?


„Android“ pritaikymo neįgaliesiems supratimas

Kaip galite įsivaizduoti pagal pavadinimą, pritaikymas neįgaliesiems dažniausiai skirtas kūrėjams, kad suteiktų papildomų funkcijų visiems negalią turintiems vartotojams. Iš tiesų, greitai žvilgtelėkite į oficialiuose prieinamumo dokumentacijos puslapiuose atskleidžia, kad „Google“ turi gana siaurą požiūrį į tai, kokias paslaugas turėtų teikti pritaikymo neįgaliesiems paslaugos.

Daugelis „Android“ naudotojų turi skirtingus gebėjimus, dėl kurių jie turi sąveikauti su „Android“ įrenginiais skirtingais būdais. Tai apima naudotojus, kurie turi regėjimo, fizinių ar su amžiumi susijusių apribojimų, dėl kurių jie negali visiškai matyti arba naudojant jutiklinį ekraną ir klausos praradimą turintiems vartotojams, kurie gali nesuvokti garsinės informacijos ir įspėjimų.

„Android“ teikia pritaikymo neįgaliesiems funkcijas ir paslaugas, padedančias šiems naudotojams geriau naršyti įrenginius lengvai, įskaitant teksto keitimą į kalbą, haptinį grįžtamąjį ryšį, navigaciją gestais, rutulinį rutulį ir krypties klaviatūrą navigacija.

Google Atsakyti, kuris yra iš anksto įdiegtas kiekviename „Android“ telefone, yra puikus pavyzdys, kokia turėtų būti „įprasta“ pritaikymo neįgaliesiems paslauga. Prieiga balsu Prieinamumas pasiekiamas dar vienu žingsniu ir leidžia beveik visiškai valdyti telefoną tik balsu. Tačiau tai, kad „Google“ ketino naudoti pritaikymo neįgaliesiems paslaugas, netrukdo kūrėjams neleidžiama jų įgyvendinti bet kokiu būdu – ir būtent tai kūrėjai turi padaryta. Būtent dėl ​​to, kaip veikia pritaikymas neįgaliesiems, ši funkcija sukuriama neįtikėtinai naudinga vartotojams su negalia arba be jo.

Norėdami šiek tiek supaprastinti dalykus, pateikiame pagrindinį „Android“ pritaikymo neįgaliesiems veikimo aprašymą. Kūrėjas sukuria Prieinamumo paslauga kad prenumeruoja įvairius Prieinamumo įvykiai kuriuos sistema siunčia Paslaugai priklausomai nuo to, ar tenkinami tam tikri kriterijai, ar ne. Kai visos paslaugos išjungtos skiltyje „Nustatymai“ –> „Pritaikymas“ – „Android“ nerenka ir nesiunčia jokių pritaikymo neįgaliesiems įvykių. Tačiau kai vartotojas pradės įgalinti pritaikymo neįgaliesiems paslaugas, „Android“ pradės stebėti ir rinkti tik tuos pritaikymo neįgaliesiems įvykius, kurių prašo pritaikymo neįgaliesiems paslauga. Pavyzdžiui, pritaikymo neįgaliesiems paslauga, prenumeruojanti pritaikymo neįgaliesiems įvykį TYPE_WINDOW_CONTENT_CHANGED apie tai praneš sistema kiekvieną kartą kad esamame lange pasikeičia. Kitas pritaikymo neįgaliesiems renginys TYPE_VIEW_CLICKED užsidega kiekvieną kartą vartotojas paspaudžia kažkokį mygtuką.

Android pritaikymo neįgaliesiems demonstravimas. Šiame vaizdo įraše įgalinau programą Taskeris stebėti lango pavadinimo pakeitimai. Tam reikia įjungti Tasker pritaikymo neįgaliesiems paslaugą. Tai galite pakartoti sukurdami naują profilį „Tasker“, kurio kontekstas „Įvykis“ nustatytas į „Kintamųjų rinkinys“, ir kaip stebėtiną kintamąjį pasirinkę %WIN. Iš viso šis maždaug 1 minutės vaizdo įrašas buvo užfiksuotas 107 pakeitimai dabartiniame lange.

Tokio tipo pritaikymo neįgaliesiems įvykiai įvyksta labai dažnai, kai naudotojas bendrauja įprastai. Taigi įsivaizduokite, kas atsitinka, kai vartotojas įgalina kelias pritaikymo neįgaliesiems paslaugas kurios reikalauja išjungti aukšto dažnio prieinamumo įvykius. Teisingai - atsilikimas. Norėdami tai sušvelninti, kūrėjai gali siauriau apibrėžti, kokio tipo pritaikymo neįgaliesiems įvykius jie turi Paslauga turėtų reaguoti ir kokiame kontekste, pvz., galimybę apriboti Paslaugą, kad tik reaguotų kai įeina tam tikros programos arba apriboti rinkimų laikotarpis tarp Renginių. Tačiau, išskyrus tai, pridėtinių išlaidų, kurias sukuria pritaikymo neįgaliesiems paslauga, dydis daugiausia priklauso nuo kokie pritaikymo neįgaliesiems įvykiai tai prenumeruoja. Iš esmės ne kiekviena pritaikymo neįgaliesiems paslauga sukels vėlavimą. Viena pritaikymo neįgaliesiems paslauga, kuriai reikalingas didelio dažnio įvykis, gali sukelti delsą, ypač jei minėta paslauga yra susieta su kita paslauga, kuriai reikalingas kitas aukšto dažnio įvykis stebimas.


Pasinerkite į prieinamumą naudodami APK Teardowns

Kaip galite suprasti iš aukščiau paskelbto vaizdo įrašo, pritaikymo neįgaliesiems paslauga, kuri stebi lango turinio pokyčius, gali sukelia gana pastebimus vartotojo sąsajos našumo pokyčius dėl daugybės užfiksuotų pritaikymo neįgaliesiems įvykių, kuriuos suaktyvino sistema. Tačiau gana sunku tiksliai nustatyti, kiek papildomų išlaidų sukelia konkreti pritaikymo neįgaliesiems paslauga. Stebėdami „LogCat“ paprastai niekur nepasieksite, nes pritaikymo neįgaliesiems įvykiai „LogCat“ spausdinami tik tuo atveju, jei pritaikymo neįgaliesiems paslaugos kūrėjas pasirenka tai padaryti. Laimei, visų „Android“ pritaikymo neįgaliesiems paslaugų tėtis, Automatinė įvestis, daro būtent tai. O „LogCat“ išvestis yra tokia pat netvarkinga, kaip jūs įsivaizduojate.

AutoInput neslepia nuo mūsų tiesos. Programos sukeltos pridėtinės išlaidos gali būti gana didžiulės, atsižvelgiant į tai, kokius įvykius stebite. Tačiau šios pridėtinės išlaidos yra būtinos, kad programa veiktų. Kad automatinė įvestis perimtų kiekvieną klavišo paspaudimą, kiekvieną ekrano gestą, kiekvieną vartotojo sąsajos atnaujinimą ir kiekvieną mygtuko paspaudimą, poreikiai stebėti atitinkamus pritaikymo neįgaliesiems įvykius. Be šių įvykių „AutoInput“ negali prisijungti prie sistemos ir užtikrinti beveik neribotą vartotojo sąsajos automatizavimą, kurį šiuo metu leidžia. Taigi visos AutoInput funkcijos prieinamumo kontekste yra visiškai prasmingos. Tačiau kitų programų atveju turime pažvelgti šiek tiek giliau, kad suprastume, kaip tvarkomos jų pritaikymo neįgaliesiems paslaugos.

Prieinamumo paslauga atributai yra apibrėžti an XML išteklių failas APK viduje. Todėl galime atlikti an APK išardymas programoje su pritaikymo neįgaliesiems paslauga, kad išsiaiškintumėte paslaugos atributus. Kiekviena programėlė veikia skirtingai, todėl pabandysiu paaiškinti, kaip jų Paslaugos atributai yra susiję su konkrečia jos atliekama funkcija.

Gimtoji iškarpinė

Gimtoji iškarpinė yra mano pasirinkimas, kai kalbama apie iškarpinės tvarkykles. Jei ieškote labai tinkinamos iškarpinės tvarkyklės, „Native Clipboard“ yra gana puiki programa. Jame netgi yra „Xposed Module“ komponentas, leidžiantis ilgai paspausti mygtuką „Įklijuoti“, kad būtų parodyta iškarpinės tvarkyklė! Deja, jei neturite prieigos prie Xposed Framework (pavyzdžiui, kiekvienas Nougat vartotojas), turėsite tai padaryti įgalinti pritaikymo neįgaliesiems paslaugą, kuri leis dukart bakstelėti bet kurią teksto įvestį, kad būtų rodoma iškarpinė vadovas. Štai ką tai reiškia.


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

Savosios iškarpinės pritaikymo neįgaliesiems paslauga reikalauja suaktyvinti pritaikymo neįgaliesiems įvykį kiekvieną kartą, kai spustelėjamas rodinys, spustelėjamas ilgai, sufokusuojamas arba pasikeičia lango būsena. Neturėdamas prieigos prie šaltinio kodo negaliu tiksliai pasakyti, kaip veikia vietinė iškarpinė, bet tikėtina, kad vietinė iškarpinė laukia, kol lango būsena parodys, kad minkštoji klaviatūra šiuo metu atidaryta, ir tada stebi, ar nepaspaudžiama įvestis lauke. Programos apklausos laikotarpis yra 100 ms, todėl tai tikrai pakankamai greita, kad iš esmės iš karto reaguotų į minkštos klaviatūros matomumo pokyčius ir dukart palietimus. Dėl to naudotojui naudojant minkštąją klaviatūrą bet kokiam tekstui įvesti gali prireikti šiek tiek pridėtinės sąsajos, o tai gali sukelti delsą.

Žalinti

Kitas yra visų mėgstamiausia akumuliatoriaus tausojimo priemonė „Greenify“. Greenify naudoja pritaikymo neįgaliesiems įvykius savo ne šakninėms funkcijoms valdyti.


"@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 />

Jis naudoja lango būsenos pakeitimus, kad nustatytų, kada telefono ekranas išsijungė, ir reikalauja atidėti užrakinimo ekrano aktyvavimą, pakeisdami parinktį saugos nustatymuose. „Greenify“ taip pat gaus pranešimo arba pranešimo būsenos tipo įvykius, o pastarasis yra nereikalingas „Android 5.0+“ įrenginiuose dėl pranešimų prieigos funkcijos. Tačiau ji vis tiek gaus šiuos įvykius, nepaisant to. Greenify savaime neturėtų sukelti didelių išlaidų, tačiau galimybė išlieka.

Nova paleidimo priemonė

Turbūt pati populiariausia trečiųjų šalių paleidimo programa rinkoje, Nova Launcher yra puikus programos, naudojančios pritaikymo neįgaliesiems paslaugą, su minimaliomis arba be jokių papildomų išlaidų, pavyzdys. Vienintelė Paslaugos priežastis – padėti tam tikriems įrenginiams atlikti gestus.


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

Kaip matote, XML faile nėra apibrėžto pritaikymo neįgaliesiems įvykio. Paminėtas tik paketo pavadinimas – Nova Launcher. Tai, kas atsitinka, yra sprendimas tam tikriems įrenginiams, kuriems „Nova Launcher“ gestai neveikia. Ši paslauga suteiks „Nova Launcher“ visus pritaikymo neįgaliesiems įvykius, kurie buvo pradėti tik „Nova Launcher“.. Tai skamba keistai, bet, matyt, tai būdas ištaisyti „Nova“ pagrindinio ekrano gestus, jei jūsų įrenginys su jais neveikia. Kadangi tai reikalauja įvykių tik iš pačios „Nova“, paslauga kelia labai mažai papildomų išlaidų.

LastPass

Galiausiai, bene labiausiai liūdnai pagarsėjusi Prieinamumo paslauga, sukelianti vėlavimą (tikriausiai dėl didžiulio populiarumo) - LastPass. „LastPass“ vėlavimo problema yra toks pastebimas kad įmonė turi pareigūną DUK puslapis, kuriame aprašoma problema. Kaip teigiama DUK, nieko negalite padaryti dėl vėlavimo, išskyrus išjungti paslaugą. Kodėl „LastPass“ paslauga atrodo tokia žiauri, kai kalbama apie vėlavimą? Pažvelkime į paslaugos atributus.


"@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 />

Tiesa ta, kad naudojant „LastPass“ paslaugą nėra nieko neįprasto. Stebėti reikia tik dviejų tipų įvykių – TYPE_VIEW_FOCUSED ir TYPE_WINDOW_CONTENT_CHANGED. Tai daroma, nes ji turi žinoti, kada pasikeitė programos / tinklalapio turinys, tada jis nuskaito dabartinį lango turinį, kad ieškotų slaptažodžio įvesties laukų. Bet kadangi paslauga nuolat tai daro per du ypač dažnai suaktyvinamus pritaikymo neįgaliesiems įvykius, tai sukelia vėlavimą. Tai apgailėtina tiesa.


Gyvenimas su atsilikimu

Kai pirmą kartą perskaitėme, kad „Google“ uždaro klaidų pranešimus apie pritaikymo neįgaliesiems delsą, nes funkcija „veikė taip, kaip numatyta“, buvome taip pat sutrikę ir nusiminę, kaip ir daugelis jūsų. Tačiau užuot priėmę paaiškinimą nominalia verte, nusprendėme patys panagrinėti šį klausimą, kad išsiaiškintume tiesą. Taigi, kai „Google“ darbuotojas klaidų ataskaitos puslapyje pasakė:

Sveiki, ši problema išlieka naudojant „Android“ leidimus. Taip pat visada bus papildoma delsa, kai įjungta pritaikymo neįgaliesiems paslauga. Taip yra todėl, kad įrenginys, be standartinės vartotojo sąsajos, suteikia daug informacijos prieinamumo paslaugoms, kad jos galėtų tiems vartotojams suteikti alternatyvią vartotojo patirtį.

Atėjome suprasti kodėl tai yra numatytą elgesį. Programos, kurios naudoja pritaikymo neįgaliesiems paslaugas taip, kaip to „Google“ nenumatė, visada patirs tam tikrą našumą; šios išlaidos yra tiesiog būtinos, kad Paslaugos pateiktų daugybę informacijos, kurią „Android“ pritaikymas neįgaliesiems paleidžia fone. „Android“ atsilieka nuo pritaikymo neįgaliesiems paslaugų ne klaida, o funkcija. Funkcija, su kuria turėsime gyventi, nebent visa sistema būtų pertvarkyta, ir neįsivaizduoju, kaip tai būtų padaryta, kad būtų galima pritaikyti tiek daug skirtingų funkcijų rinkinių iš tiek skirtingų programų.

Mažų mažiausiai „LastPass“ kūrėjai to nesiimtų. Jų kūrėjai dirbo su „Chromium“ kūrėjais optimizuoti prieinamumo palaikymą, galbūt įjungus LastPass palaikymą naudojant API o ne įgalinti pritaikymo neįgaliesiems paslaugą. Viena iš galimybių yra optimizuoti papildomas išlaidas, patiriamas naudojant pritaikymo neįgaliesiems paslaugas, tačiau, kaip daugelis kūrėjų netiesiogiai pažymėjo, „Chromium“ forumuose, tai tiesiog priemonė, kuri neišspręs to fakto, kad netyčia naudojant pritaikymo neįgaliesiems paslaugas gali atsilikimas.


Ypatingas ačiū AutoInput kūrėjui joaomgcd už atsakymus į daugelį mano klausimų apie pritaikymą neįgaliesiems!