Get it on google play

This Handler class should be static or leaks might occur


  • administrators

    بالنسبة الى التحذير

    This Handler class should be static or leaks might occur

    معنى هذا الخطأ ان استخدام الـ
    handler
    بهذه الطريقة دون ان تقوم انت بانهائه بيدك فى الكود بعد ان يقوم بتنفيذ ما به سيؤدى الى بطئ فى الذاكرة وبالتالى بطئ فى البرنامج

    هذا الخطأ يظهر لان اى
    handler
    داخل الكلاس الرئيسى
    Main Activity

    يظل مربوط بها ولا يتم انهائه من قبل
    garbage collection
    او جامع القمامة الذى يقوم بتنظيف الذاكرة اول باول حتى لا تكون مليئة وبالتالى تؤدى الى بطئ البرنامج

    لهذا هذا هو الحل

    private Handler handler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message message) {
            int currentPosition = message.what;
            progressBar.setProgress(currentPosition);
    
            String elapsedTime = createTimeLabel(currentPosition);
            elapsedTimeLable.setText(elapsedTime);
    
            String remainTime = createTimeLabel(totalTime - currentPosition);
            remainingTimeLable.setText("- " + remainTime);
    
            return true;
        }
    });
    

    ولاحظ هنا قمنا باستخدام الـ
    interface

    Callback()
    الذى بداخلها دالة تقوم بارجاع
    boolean

    وبالتالى عند استخدامها داخل الكود الخاص بنا نقوم باستخدام السطر

    return true;
    الذى يقوم بانهاء الـ
    handler
    وبالتالى لن يظل مربوط بالـ
    main activity
    وبالتالى سيكون متاح للـ
    garbage collection
    لتقوم بانهائه فى الوقت المناسب



  • @hassan-youssef said in كيف يمكن تصحيح هذه الاخطاء ؟:

    String timeLabel = "";
    لان هذا المتغير سيتم استخدامه فقط داخل هذه الدالة وسينتهى بانتهاء تنفيذ دالة لذا فلا داعى لاعطائه قيمة اولية

    اذن سيصبح هكذا :

    String timeLabel;

    بارك الله فيك اخي حسن.



Suggested Topics