Sobes.tech
Middle

Android პლატფორმაზე პოზიციების შეცვლის სპეციფიკა რა არის?

sobes.tech AI

პასუხი AI-სგან

როდესაც პოზიციები იცვლება (მაგალითად, ეკრანის ბრუნვა ან სხვა კონფიგურაციის ცვლილებები) Android-ზე, მიმდინარე Activity განადგურდება და ახალი შექმნება.

რა ხდება:

  • ძველი Activity-ის სიცოცხლის ციკლები იძახება: onPause(), onStop(), onDestroy().
  • ძველი Activity მეხსიერებიდან ამოიღება.
  • ახალი Activity შეიქმნება.
  • ახალი Activity-ის სიცოცხლის ციკლები იძახება: onCreate(), onStart(), onResume().

QA-ისთვის სპეციფიკა:

  • მონაცემების დაკარგვა: არასანახავი მონაცემები, შეყვანის ველებში, შერჩეული ელემენტები სიისა და სხვა შეიძლება დაიკარგოს, თუ მათი შენახვა არ არის განხორციელებული.
  • UI-ის მდგომარეობა: ელემენტების ხილვადობა, სქროლინგის პოზიცია, შერჩეული ტაბები და სხვა UI-ის მდგომარეობა შეიძლება აღდგეს საწყის მდგომარეობად.
  • ფონური ოპერაციები: დაწყებული ფონური დავალებები (მაგალითად, მონაცემების ჩატვირთვა) შეიძლება გაჩერდეს ან არასწორად დასრულდეს.
  • პროდუქტიულობა: კონფიგურაციის ცვლილებები შეიძლება გამოიწვიოს აპლიკაციის დაყოვლილობა, რადგან Activity-ის მუდმივი გადახალისება ხდება.
  • მეხსიერების გაჟონვა: რესურსებთან არასწორი მუშაობა (მაგალითად, Listener-ები, რომლებიც onDestroy()-ში არ არის გაუქმებული) შეიძლება გამოიწვიოს მეხსიერების გაჟონვა.

როგორ მართავენ დეველოპერები (და რა უნდა პირველ რიგში შემოწმოს QA-მ):

  • მდგომარეობის შენახვა: onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC) გამოყენებით.
    // მონაცემების შენახვის მაგალითი `onSaveInstanceState()`-ში
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // მონაცემების აღდგენის მაგალითი `onCreate()`-ში
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (savedInstanceState != null) {
            String savedText = savedInstanceState.getString("saved_text");
            if (savedText != null) {
                myEditText.setText(savedText);
            }
        }
    }
    
  • კონფიგურაციის ცვლილებების მართვა: android:configChanges-ის განცხადება AndroidManifest.xml-ში, იმ შემთხვევებში, როდესაც არ არის საჭირო Activity-ის თავიდან შექმნა.
  • ViewModel-ის სიცოცხლის ციკლი: ViewModel ინარჩუნებს თავის მდგომარეობას კონფიგურაციის ცვლილების დროს და არ განადგურდება ერთად Activity-სთან.
  • Fragment-ების მართვა: სწორად მართვა Fragment-ების სიცოცხლის ციკლის.

პოზიციის ცვლილების ტესტირება:

  • ეკრანის ბრუნვის სიმულაცია სხვადასხვა მოწყობილობებზე და ემულატორებზე.
  • მონაცემების შენახვა და აღდგენა პოზიციის ცვლილების შემდეგ.
  • UI-ის მდგომარეობის შემოწმება (ხილვადობა, ტექსტი, სქროლ, შერჩეული ელემენტები).
  • ფონური დავალებების გაჩერება/გაგრძელება.
  • მეხსიერების გაჟონვის შემოწმება (Android Profiler-ის გამოყენებით).
  • სტრესული ტესტირება: სწრაფი მრავალჯერადი ცვლილებები.

QA-სთვის ინსტრუმენტები:

  • Android Studio (დაბლოკვა, ლოგების ნახვა, Profiler-ის გამოყენება).
  • adb ბრძანებები ბრუნვის სიმულაციისთვის.
  • სხვადასხვა ემულატორი და რეალური მოწყობილობები სხვადასხვა განზომილებებით და Android ვერსიებით.