10-Amaliy : Activitylar bilan ishlash. Activity oynasi. Faoliyat va dasturning hayot aylanishi


Download 172.5 Kb.
bet1/2
Sana27.12.2022
Hajmi172.5 Kb.
#1069644
  1   2
Bog'liq
10-Amaliy


10-Amaliy : Activitylar bilan ishlash. Activity oynasi.
Faoliyat va dasturning hayot aylanishi
Android ilovasida vizual interfeys yaratishning asosiy komponenti bu faoliyatdir. Faoliyatning bitta ekran yoki dastur oynasi bilan bog'lanishi odatiy hol emas va oynalar o'rtasida almashish bir faoliyatdan boshqasiga o'tishda sodir bo'ladi. Ilovada bir yoki bir nechta faoliyat bo'lishi mumkin. Masalan, bo'sh Faoliyatli loyihani yaratishda loyihaga sukut bo'yicha bitta Faoliyat klassi qo'shiladi - MainActivity, ilova undan boshlanadi:
public class MainActivity extends AppCompatActivity {
// sinf tarkibi }
Barcha faoliyat ob'ektlari android.app.Activity sinfining ob'ektlari bo'lib, u barcha harakatlar uchun asosiy funksiyalarni o'z ichiga oladi. Oldingi mavzudagi ilovada biz bu sinf bilan bevosita ishlamadik va MainActivity AppCompatActivity sinfidan meros bo'lib qoldi. Biroq, AppCompatActivity sinfining o'zi, garchi to'g'ridan-to'g'ri bo'lmasa ham, Activity asosiy sinfidan meros bo'lib qoladi.
Ilovaning hayot aylanishi
Barcha Android ilovalari tizim tomonidan qat'iy belgilangan hayot aylanishiga ega. Foydalanuvchi dasturni ishga tushirganda, tizim ushbu ilovaga yuqori ustuvorlikni beradi. Har bir dastur alohida jarayon sifatida ishlaydi, bu tizimga ba'zi jarayonlarga boshqalarga qaraganda yuqoriroq ustuvorlik berishga imkon beradi. Buning yordamida, masalan, ba'zi ilovalar bilan ishlashda Android kiruvchi qo'ng'iroqlarni bloklamaslikka imkon beradi. Ilova bilan ishlashni tugatgandan so'ng, tizim barcha bog'langan resurslarni chiqaradi va ilovani past ustuvorlik toifasiga o'tkazadi va uni yopadi.
Ilovada mavjud bo'lgan barcha faoliyat ob'ektlari tizim tomonidan faoliyatlar to'plami ko'rinishida boshqariladi, bu orqa stek deb ataladi. Yangi faoliyat ishga tushirilganda, u stek ustiga suriladi va yangi faoliyat paydo bo'lguncha qurilma ekranida ko'rsatiladi. Joriy faoliyat o'z ishini tugatgandan so'ng (masalan, foydalanuvchi dasturni tark etadi), keyin u stekdan o'chiriladi va avval stekda ikkinchi bo'lgan faoliyat qayta ishlay boshlaydi.
Faoliyat ishga tushirilgandan so'ng, u tizim tomonidan qayta ishlangan va bir qator qayta qo'ng'iroqlar mavjud bo'lgan bir qator voqealardan o'tadi:
protected void onCreate(Bundle saveInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
Ushbu barcha qayta qo'ng'iroqlar o'rtasidagi munosabatlar sxematik tarzda quyidagicha ifodalanishi mumkin

onCreate()
onCreate - bu faoliyatni amalga oshirishni boshlaydigan birinchi usul. Ushbu usulda faoliyat Yaratilgan holatga o'tadi. Ushbu usul faoliyat sinfida aniqlanishi kerak. U faoliyatning dastlabki konfiguratsiyasini amalga oshiradi. Xususan, vizual interfeys ob'ektlari yaratiladi. Ushbu usul, agar u saqlangan bo'lsa, faoliyatning oldingi holatini o'z ichiga olgan Bundle ob'ektini oladi. Agar faoliyat qayta yaratilsa, bu ob'ekt null bo'ladi. Agar faoliyat allaqachon yaratilgan bo'lsa, lekin to'xtatilgan holatda bo'lsa, u holda to'plamda faoliyat bilan bog'liq ma'lumotlar mavjud.
OnCreate() usuli bajarilishini tugatgandan so'ng, faoliyat Boshlangan holatga o'tadi va tizim onStart() usulini chaqiradi.
onStart
onStart() usuli qurilma ekranida faoliyatni ko'rsatishga tayyorlaydi. Qoidaga ko'ra, bu usulni bekor qilish kerak emas va inline kod barcha ishlarni bajaradi. Usul tugagach, ekranda faoliyat ko'rsatiladi, onResume usuli chaqiriladi va faoliyat Resume holatiga kiradi.

onResume
OnResume usuli chaqirilganda, faoliyat Resume holatiga kiradi va qurilma ekranida ko'rsatiladi va foydalanuvchi u bilan o'zaro aloqada bo'lishi mumkin. Va faoliyatning o'zi diqqatni yo'qotmaguncha, masalan, boshqa faoliyatga o'tish yoki oddiygina qurilma ekranini o'chirish tufayli shu holatda qoladi.


onPause
Agar foydalanuvchi boshqa faoliyatga o'tishga qaror qilsa, tizim onPause usulini chaqiradi va faoliyat Pauzed holatiga kiradi. Ushbu usulda siz foydalanilgan resurslarni bo'shatib qo'yishingiz, audio tinglash, animatsiyalar kabi jarayonlarni to'xtatib qo'yishingiz, kamerani to'xtatishingiz (agar u ishlatilsa) va hokazo, ular tizimning ishlashiga kamroq ta'sir qiladi.

Ammo shuni yodda tutingki, bu holatda faollik hali ham ekranda ko'rinadi va bu usul ishlash uchun juda oz vaqt talab etadi, shuning uchun siz bu erda hech qanday ma'lumotni saqlamasligingiz kerak, ayniqsa tarmoqqa kirishni talab qilsa, masalan, ma'lumotlarni yuborish. Internet orqali yoki ma'lumotlar bazasiga kirish - bunday harakatlar eng yaxshi onStop () usulida amalga oshiriladi.

Ushbu usulni bajargandan so'ng, faoliyat ko'rinmas holga keladi, ekranda ko'rsatilmaydi, lekin u hali ham faol. Va agar foydalanuvchi ushbu faoliyatga qaytishga qaror qilsa, tizim yana onResume usulini chaqiradi va faoliyat ekranda yana paydo bo'ladi.

Tizim to'satdan faol ilovalarning ishlashi uchun ko'proq xotira kerakligini ko'rsa, yana bir variant paydo bo'lishi mumkin. Va tizimning o'zi ko'rinmaydigan va fonda bo'lgan faoliyatni butunlay o'chirib qo'yishi mumkin. Yoki foydalanuvchi Orqaga tugmasini bosishi mumkin. Bunday holda, faoliyat bo'yicha onStop usuli chaqiriladi.


onStop
Ushbu usulda faoliyat To'xtatilgan holatga kiradi. Bunday holatda, faoliyat butunlay ko'rinmaydi. OnStop usulida foydalanuvchi faoliyat bilan o'zaro aloqada bo'lmaganda unga kerak bo'lmagan foydalanilgan resurslarni chetga surib qo'yish kerak. Bu erda siz ma'lumotlarni, masalan, ma'lumotlar bazasiga saqlashingiz mumkin.

Shu bilan birga, To'xtatilgan holatda, faoliyat qurilma xotirasida qoladi, barcha interfeys elementlarining holati saqlanadi. Misol uchun, agar matnni tahrirlash matn maydoniga biron bir matn kiritilgan bo'lsa, u holda faoliyat qayta tiklangandan so'ng va uning Davomlangan holatiga o'tgandan so'ng, biz matn maydonida avval kiritilgan matnni yana ko'ramiz.

Agar onStop usulini chaqirgandan so'ng, foydalanuvchi avvalgi faoliyatga qaytishga qaror qilsa, tizim onRestart usulini chaqiradi. Agar faoliyat o'z ishini to'liq yakunlagan bo'lsa, masalan, ilovaning yopilishi sababli, u holda onDestroy () usuli chaqiriladi.
onDestroy
Xo'sh, faoliyat onDestroy usulini chaqirish bilan tugaydi, bu tizim konfiguratsiya sabablari (masalan, ekranni aylantirish yoki ko'p oyna rejimida) tufayli faollikni o'chirishga qaror qilganda yoki finish() usuli chaqirilganda sodir bo'ladi.

Shuni ham yodda tutingki, ekran yo'nalishi o'zgarganda, tizim faoliyatni to'xtatadi va keyin onCreate usulini chaqirish orqali uni qayta yaratadi.

Umuman olganda, faoliyat holatlari o'rtasidagi o'tishni quyidagicha ifodalash mumkin:

Keling, bir nechta vaziyatlarni ko'rib chiqaylik. Agar biz Faoliyat bilan ishlasak va keyin boshqa dasturga o'tsak yoki Bosh sahifa tugmasini bossak, u holda Faoliyatda quyidagi usullar zanjiri chaqiriladi: onPause -> onStop. Faoliyat to'xtatilgan holatda. Agar foydalanuvchi Faoliyatga qaytishga qaror qilsa, u holda quyidagi usullar zanjiri chaqiriladi: onRestart -> onStart -> onResume.

Yana bir holat, agar foydalanuvchi Orqaga tugmachasini bossa, u holda quyidagi onPause -> onStop -> onDestroy zanjiri chaqiriladi. Natijada, Faoliyat yo'q qilinadi. Agar biz to'satdan vazifalar menejeri orqali yoki ilovani qayta ochish orqali Faoliyatga qaytishni istasak, u holda faoliyat onCreate -> onStart -> onResume usullari orqali qayta yaratiladi.

Hayot aylanishini boshqarish
Tegishli usullarni bekor qilish orqali biz ushbu hayot aylanishi hodisalarini boshqarishimiz mumkin. Buning uchun oxirgi bobdan MainActivity sinfini oling va uni quyidagicha o'zgartiring:
package com.example.viewapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private final static String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
@Override
protected void onDestroy(){
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
protected void onStop(){
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onStart(){
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onPause(){
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onResume(){
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onRestart(){
super.onRestart();
Log.d(TAG, "onRestart");
}
}
Voqealarni qayd qilish uchun bu yerda android.util.Log sinfidan foydalaniladi.

Bunday holda, hayot aylanishining barcha asosiy usullari qayta ishlanadi. Barcha ishlov berish Log.d () usulini chaqirish uchun qisqartiriladi, u TAG o'tkaziladi - tasodifiy satr qiymati va Android Studio pastki qismidagi Logcat konsolida ko'rsatiladigan, disk raskadrovka ma'lumoti sifatida ishlaydi. Agar ushbu konsol sukut bo'yicha yashirin bo'lsa, u holda biz unga View -> Tool Windows -> Logcat menyu bandi orqali o'tishimiz mumkin.


Ilova ishga tushganda, biz Logcat oynasida disk raskadrovka ma'lumotlarini ko'rishimiz mumkin bo'ladi, bu faoliyatning hayot aylanish usullarida aniqlangan:

Turli faoliyatlar o'rtasidagi o'zaro ta'sir uchun asosiy sinf android.content.Intent hisoblanadi. Bu dastur bajarishi kerak bo'lgan vazifani ifodalaydi.


Download 172.5 Kb.

Do'stlaringiz bilan baham:
  1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling