ඔබ මෑත යෙදුම් ලැයිස්තුවෙන් යෙදුමක් ස්වයිප් කළ විට ඇත්ත වශයෙන්ම සිදුවන්නේ කුමක්ද?


148

අයිස්ක්‍රීම් සැන්ඩ්විච් හි මෑත කාලීන යෙදුම් ලැයිස්තුවෙන් යෙදුම් ස්වයිප් කිරීමේ හැකියාව එකතු කළ අතර එමඟින් ඒවා ස්ථිරවම බැහැර කරයි (මා දන්නා පරිදි මෙය වැනිලා ශ්‍රිතයක් මිස CM / අභිරුචි ROM එකක් නොවේ). ප්‍රලේඛන සහ වේදිකා උද්දීපනයන් මෙම ක්‍රියාකාරීත්වයේ යටින් පවතින ක්‍රියාකාරකම් ආවරණය කරන බවක් නොපෙනේ, නමුත් පද්ධතිය ඇත්ත වශයෙන්ම කරන්නේ කුමක්දැයි දැන ගැනීමට මට කුතුහලයක් ඇත.

මගේ කුතුහලය තව දුරටත් වැඩි කරමින්, මම ඉක්මන් පරීක්ෂණයක් කිරීමට තීරණය කළෙමි: මම CM9 ස්ථාපනයකින් සංගීතය ආරම්භ කළෙමි, පසුව එයින් ඉවත් විය. මම පසුව මෑත යෙදුම් ලැයිස්තුව පරීක්ෂා කර බැලූ විට එය සැබවින්ම එහි ඇති බව දුටුවෙමි (සහ නියම තත්වයේ, සිඟිති-රූපය මත පදනම්ව). පසුව මම Settings->Applicationsබලහත්කාරයෙන් සංගීත යෙදුම නැවැත්වුවෙමි, නමුත් එය තවමත් මෑත ලැයිස්තුවේ ලැයිස්තුගත කර ඇති අතර, එය පසුබිමේ පවතින ක්‍රියාවලීන් හා සම්බන්ධ නොවන බව විශ්වාස කිරීමට හේතු විය.

සංගීතය දුර්වල තේරීමක් විය හැකි බව දැන් වටහාගෙන, මම USA Today යෙදුම සමඟ ද පරීක්‍ෂා කළෙමි. මෙය මූලික වශයෙන් එකම හැසිරීමක් ප්‍රදර්ශනය කළ අතර, බල නැවතුමෙන් පසු එය නැවත ආරම්භ කිරීමට බල කෙරුණු බවක් පෙනෙන්නට තිබුණි (එය අර්ථවත් කරයි) නමුත් මෑත යෙදුම් ලැයිස්තුවේ සිඟිති-රූපය මෙය පිළිබිඹු නොකළේය (හැඹිලි, මම අනුමාන කරන්නේ?).

ඉතින්, ඔබ මෑත ලැයිස්තුවෙන් යෙදුමක් ස්වයිප් කරන විට ඇත්ත වශයෙන්ම මෙහෙයුම් මට්ටමින් කුමක් සිදුවේද? එය හුදෙක් යෙදුමේ දත්ත RAM වලින් ඉවත් කර කසළ එකතු කර එහි සුරකින ලද තත්වය විනාශ කරයිද?

Answers:


68

මෑත යෙදුම් ලැයිස්තුවෙන් යෙදුම් මාරුවීම වැනිලා වන අතර ඔව්, හොඳින් ලේඛනගත කර නොමැත. මෙය විවිධ ඇන්ඩ්‍රොයිඩ් සංසදවල හොඳ සාකච්ඡාවක මාතෘකාව වී ඇත ... සම්මුතිය වඩාත් හොඳින් විස්තර කර ඇති බව පෙනේ මෙහි සමහර අදහස් : හැසිරීම යෙදුමක් වැසීමට සමාන නමුත් හරියටම සමාන නොවන බව - පොදුවේ ( පැහැදිලි පසුපස බොත්තම් හැසිරවීම නිර්වචනය නොකරන යෙදුම් සඳහා) එය ඔබ යෙදුමෙන් පිටවන යෙදුමකින් ප්‍රමාණවත් වාර ගණනක් පහර දීම හා සමානයි.

සබැඳියේ විශේෂතා පිළිබඳ තවත් විස්තර ඇත, නමුත් සමස්තයක් ලෙස ඔබට එය යෙදුමෙන් ඉවත් වන බව සිතිය හැකිය.

සංගීත යෙදුමට විශේෂිත වූ එය සේවාවක් ආරම්භ කරන බව මම විශ්වාස කරමි, එම නිසා කාර්යය (සංගීත යෙදුම / යූඅයි) වසා දැමිය හැකි අතර, සේවාව පසුබිම තුළ දිගටම ක්‍රියාත්මක වන අතර එමඟින් ඔබේ සංගීතය හදිසියේම නතර නොවනු ඇත. මතක කළමනාකරණ හේතූන් මත ඉවත් කර ඇත. එය ඔබ දුටු දෙයට බලපාන්නට ඇත.


1
ස්තූතියි, එම සබැඳියට හොඳ සාකච්ඡාවක් තිබේ. ඔබත් නිවැරදි විය හැකිය: සංගීතය, එය දුර්වල පරීක්ෂණයක් විය හැකිය. මම වෙනත් යෙදුමක් උත්සාහ කරමි.
eldarerathis

2
රෙඩ්ඩිට් සාකච්ඡාව වඩා හොඳ සෙවුම් පද කිහිපයක් සොයා ගැනීමට මට උපකාරී වූ බැවින් ඉදිරියට ගොස් මෙය පිළිගැනීමට යාම, මගේ පිළිතුරෙහි මා සඳහන් කළ ඩයැන් හැක්බෝන්ගේ සමහර ලිපි මගින් එය සනාථ කරන බවක් පෙනෙන්නට තිබුණි . ස්තූතියි!
eldarerathis


1
පරිපූර්ණ ස්තූතියි! මට මෙම ලිපිය මට උදව් විය: reddit.com/r/Android/comments/mpevh/…
බොරිස් ස්ට්‍රැන්ඩ්ජෙව්

සේවාව පසුබිමේ ධාවනය වුවද, රොකට් ප්ලේයර් වැනි තෙවන පාර්ශවීය සංගීත වාදකයන් ඔබ රෙකන්ට්ස් ලැයිස්තුවෙන් යෙදුම ස්වයිප් කරන විට සංගීතය නවත්වන අතර සංගීතය ආරම්භ කිරීම සඳහා ඔබට යෙදුම විවෘත කිරීමට හෝ නැවත විජට් වාදනය කිරීමට අවශ්‍ය වේ.
ලකී

78

ගූගල් සේවකයින්ගෙන් යම් පැහැදිලි කිරීම් වලට තුඩු දුන් ඉන්ද්‍රජාලික සෙවුම් වචන මට හමු වූ බව පෙනේ. විශේෂයෙන්, ඔබ මෑත ලැයිස්තුවෙන් යමක් ස්වයිප් කළ විට කුමක් සිදුවේදැයි ඩයැන් හැක්බර්න් පැහැදිලි කරන විවිධ ස්ථාන කිහිපයක් මට හමු විය. පළමුවැන්න ඇගේ එක් Google+ පෝස්ට් එකක අදහස් දැක්වීමකි :

[W] තොප්පිය විශේෂයෙන් සිදුවන්නේ ඔබ මෑත කාලීන කාර්යයක් අතුගා දැමූ විට ය: (1) යෙදුමේ ඕනෑම පසුබිමක් හෝ හිස් ක්‍රියාවලියක් මරා දමයි (බලන්න http://developer.android.com/guide/topics/fundamentals/processes-and- threads.html # මෙහි තේරුම සඳහා ජීවන චක්‍රය ), සහ (2) නව http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent) API භාවිතා කරයි ඉවත් කරන ලද කාර්යය පිළිබඳ යෙදුමේ සේවාවන් එමඟින් සුදුසු යැයි සිතන ඕනෑම දෙයක් කළ හැකිය.

ඇය බ්ලොග් සටහනකසඳහන් කරයි :

ඇත්ත වශයෙන්ම, මෑත කාර්යයන්හි ඇතුළත් කිරීමක් ඉවත් කිරීමෙන් ක්‍රියාවලිය සඳහා පවතින ඕනෑම පසුබිම් ක්‍රියාවලියක් විනාශ වේ. එය directly ජුවම සේවා නැවැත්වීමට හේතු නොවේ, කෙසේ වෙතත් ඔවුන් නැවැත්විය යුතු යැයි අදහස් කිරීමට මෙය අවශ්‍ය දැයි තීරණය කිරීම සඳහා කාර්යය ඉවත් කර ඇති බව සොයා ගැනීමට ඔවුන්ට API ඇත. මෙය එසේ වන්නේ ඊ-තැපැල් යෙදුමක මෑත කාලීන කාර්යය නිසා එය විද්‍යුත් තැපෑල සඳහා පරීක්ෂා කිරීම නවත්වන්නේ නැත.

ඔබට යෙදුමක් මුළුමනින්ම නැවැත්වීමට අවශ්‍ය නම්, යෙදුම් තොරතුරු වෙත යාමට ඔබට මෑත කාලීන කාර්යයන් දිගු වේලාවක් එබිය හැකි අතර බලහත්කාරයෙන් එහි නතර කරන්න. නැවැත්වීම යනු යෙදුම සම්පූර්ණයෙන් මරා දැමීමකි - සියලු ක්‍රියාදාමයන් විනාශ වී ඇත, සියලුම සේවාවන් නවතා ඇත, සියලු දැනුම්දීම් ඉවත් කර ඇත, සියලු අනතුරු ඇඟවීම් ඉවත් කර ඇත.

එබැවින්, සාරාංශයක් ලෙස පෙනෙන්නේ යෙදුමක් ලැයිස්තුවෙන් ඉවත් කිරීමෙන් පළමුව යෙදුම සඳහා සියලු පසුබිම් ක්‍රියාවලීන් විනාශ වන අතර පසුව onTaskRemovedපසුබිම් කාර්යය ඉවත් කළ බව යෙදුමට දැනුම් දීමට භාවිතා කරන්න. එම අවස්ථාවේදී එය සිදුවන්නේ කුමක් දැයි තීරණය කිරීම යෙදුම සතු බව පෙනේ, එබැවින් තාක්‍ෂණයෙන් තාක්‍ෂණයෙන් එතැනින් ඔබ්බට යෙදුමට කුමක් සිදුවේද යන්න පිළිබඳ දැඩි හා වේගවත් රීතියක් නොමැති බව මම අනුමාන කරමි .


එය නිසැකවම පැහැදිලි නොවන හැසිරීමකි, ඉතා සිත්ගන්නා සුළුය!
මැතිව් කියවන්න

"ක්‍රියාවලිය සඳහා පවතින ඕනෑම පසුබිම් ක්‍රියාවලියක් මරා දමන්න. එය කෙලින්ම සේවාවන් නැවැත්වීමට හේතු නොවේ". මෙය තවමත් සත්‍යයක්ද? මම ඊයේ පරීක්ෂණයක් කළා. ඊයේ, මම ප්‍රධාන ක්‍රියාවලියේ පසුබිම් සේවාවක් සහිත යෙදුමක් අතුගා දැමුවෙමි. යෙදුම් => ධාවනය වන UI මඟින් ක්‍රියාවලි 0 ක් සහ සේවා 0 ක් පෙන්වන ලදි. පසුව මම වෙනම යෙදුම් විශේෂිත ක්‍රියාවලියක් තුළ ක්‍රියාත්මක වන ක්‍රියාවලියක් සමඟ එකම යෙදුම මාරු කළෙමි. යෙදුම් => ධාවනය වන UI පැවසුවේ මට ක්‍රියාවලි 0 ක් සහ සේවාවක් 1 ක් ඇති බවයි. එය ඇන්ඩ්‍රොයිඩ් 4.4.4 සමඟ Moto X (2014) මත විය.
ස්ටීවන් වෙක්ස්ලර්

Te ස්ටීවන් වෙක්ස්ලර්: පළමු අවස්ථාවෙහිදී සේවාව තනිවම අවසන් වූවා විය හැකිය, නමුත් දෙවැන්න නොවේ, නැතහොත් දෙවන අවස්ථාවෙහිදී, ප්‍රධාන ක්‍රියාවලිය තීරණය කරනු ලැබුවේ (කිසියම් හේතුවක් නිසා) සේවාව නැවැත්වීමට අකමැති වීම විය හැකිය. නිශ්චිතවම දැන ගැනීමට අපහසුය.
eldarerathis

ආරම්භක සේවාව මෑත ලැයිස්තුවෙන් ඉවත් වීමෙන් පසු නැවත ස්වයංක්‍රීයව ආරම්භ වේ, එහි onCreate නැවත කැඳවනු ලැබේ. නමුත් සමහර යෙදුම් වල onCreate onTaskRemoved ට පෙර ඇමතූ අතර සමහර ඒවා onTaskRemoved ට පසුව කැඳවනු ලැබේ. ඇයි මේ හැසිරීම එසේ?
umesh

21

පංතිවල ප්‍රභව කේතයේ යම් තොරතුරු com.android.internal.policy.impl.RecentApplicationsBackground සහ com.android.internal.policy.impl.RecentApplicationsDialog .

මම මේවා නිවැරදිව කියවන්නේ නම්, යෙදුම් තේරීම සඳහා නිශ්චිත හසුරුවන්නන් සිටින නමුත් ඒවා ස්වයිප් කිරීම සඳහා විශේෂ කිසිවක් නොමැත onDetachedFromWindow(), com.android.View.onDetachedFromWindow()එමඟින් මූලික වශයෙන් මූලද්‍රව්‍යය සැඟවී දත්ත ඉවත් කරයි. ඔස්ටින් මිල්ස්ගේ පිළිතුරට අනුරූප වන යෙදුම ස්වයිප් කිරීමේදී විශේෂ දෙයක් සිදු නොවන බවට මෙය ඉඟි කරයි, මන්ද ලැයිස්තුව සක්‍රීය යෙදුම නොපෙන්වන හෙයින්, යෙදුමක් onPause()"ඉවත්ව යන විට" සහ වෙනත් පද්ධති ඇමතුම් ඇත. දැනටමත් සිදුවී ඇත.


10

මම හිතන්නේ එය පසුපස බොත්තම කරන ආකාරයටම කරනු ඇත. එක් කුඩා වෙනසක් හැර. එය finish()යෙදුමේ සියලුම ක්‍රියාකාරකම් / කොටස් වනු ඇත.

කුඩා ස්වයං ගොඩනැඟීමේ යෙදුමක් සමඟ කුඩා පරීක්ෂණයක් කළා. ඔබටත් පරීක්ෂා කළ හැකිය. මගේ පරීක්ෂණ යෙදුම මෙන්න: https://bitbucket.org/Leandros99/lifecycletest (බාගත කරගත හැකිය. ගොඩනගා ගත නොහැකි අය සඳහා.)
සෑම ක්‍රියාකාරකම් ජීවන චක්‍ර ක්‍රමයක් තුළම ( http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle ) යෙදුම ලොගයක් මුද්‍රණය කරන්න. ඔබට එය adb logcat සමඟ නැරඹිය හැකිය (Android SDK, cd to platform-tools cmd / shell වලින් ස්ථාපනය කර ටයිප් කරන්නadb logcat . දැන් ඔබට පෙනෙනු ඇත, ඔබ සෑම විටම පහර හෝ ගෙදර බොත්තම වැනි දෙයක් කරන විට, යෙදුම ඉහත සඳහන් කළ ජීවන චක්‍ර ක්‍රමය මුද්‍රණය කරයි. )

ඔබගේ ප්‍රශ්නය: මෑත කාලීන යෙදුම් ලාච්චුවෙන් මම යෙදුමක් ස්වයිප් කළහොත්, onDestroyක්‍රමය කැඳවනු ලැබේ. එය පසුපස බොත්තමට සමාන වේ.
මම ටිකක් උදව් කළා කියලා හිතනවා. ප්‍රශ්න තිබේ නම් විමසන්න.


3

එය යෙදුම වසා දමයි, සහ එහි දත්ත RAM තුළ ගබඩා කර ඇත. මේ අනුව, ඔබට වෙනත් RAM ඉඩක් ලබා දීමෙන් ඔබට වෙනත් යෙදුම් ධාවනය කළ හැකිය. කෙසේ වෙතත්, භාවිතා කරන යෙදුම වැසීමේ ප්‍රති background ලයක් ලෙස පසුබිම් සේවාවන් ස්වයංක්‍රීයව වසා දැමීමට බල නොකෙරේ.


1
එදිනෙදා භාෂාවෙන් ලියා ඇතත්, මෙය සැබවින්ම තරමක් නිවැරදි පිළිතුරකි - එය ක්‍රියාවලිය බැහැර කර ඇති බව ග්‍රහණය කරයි, අනෙක් පිළිතුරු බොහොමයක් (වැරදියට එය පසුපස බොත්තම සමඟ සංසන්දනය කරන) අතුරුදහන්. කෙසේ වෙතත්, මෙහි නොමැති දෙය නම්, කෙසේ හෝ මතකය ලබා ගැනීමට අවශ්‍ය වූ විට ඇන්ඩ්‍රොයිඩ් විසින් ක්‍රියාවලීන් බැහැර කරනු ඇති බව වටහා ගැනීමයි, එබැවින් එය යම් මතක පිරිසිදු කිරීමක් සිදු කරන අතරම, අවශ්‍ය වුවහොත් / අවශ්‍ය වූ විට එය ස්වයංක්‍රීයව සිදුවනු ඇත.
ක්‍රිස් ස්ට්‍රැටන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.