Android кеш влияет на значение переменной? - PullRequest
0 голосов
/ 28 марта 2020

Я использую код ниже в приложении Android. В некоторых телефонах код работает правильно, как и ожидалось. В других случаях переменная неожиданно меняет свое значение.

Пример LogCat из некоторых тестов:

03-27 13:38:59.628 17735-17735/? I/System.out: my_var=1.0 

03-27 13:38:59.651 17735-17740/? I/zygote: Do partial code cache collection, code=448KB, data=496KB

03-27 13:38:59.652 17735-17740/? I/zygote: After code cache collection, code=446KB, data=495KB

    Increasing code cache capacity to 2MB

03-27 13:38:59.693 17735-17735/? I/System.out: my_var=0.0 

РЕДАКТИРОВАТЬ: я пытался создать минимальный метод, показывающий неожиданное поведение; в этом случае my_var меняет значение за пределы l oop, которое я указывал ранее; Я не мог видеть сообщения зиготы в этих тестах; Тем не менее, я думаю, что неожиданное поведение может быть связано с изменениями в кеше. Неожиданное поведение происходит только в некоторых телефонах (~ 6-дюймовый телефон LGE LG-Q710AL Android 8.1.0 API 27). Спасибо вам за ваше время. Любая помощь будет принята с благодарностью.

    public double[] my_method(double[] array, String my_string) {

        /*
        Example of LogCat:

        (exit 1)  my_var=1.0
        (exit 2)  my_var=1.0
        (exit 3)  my_var=1.0
        (exit 4)  my_var=0.0 <=== SHOULD BE 1.0
        */

        for (int i=0; i<2500; i++) //example of input_array.
            array[i]=66.4079;

        my_string="string_1";  //example of input_string.

        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int result = -1;
        int max = 1; 
        int count=0;
        double number_8=0;
        int number_of_items=array.length;

        int[] array_of_items_multiplied = new int[number_of_items];

        double my_var=10;
        if ( my_string.equals("string_1") )
            my_var=1; //selected case
        else if ( my_string.equals("string_2") )
            my_var=100;

        double [] other_array = new double[100];
        double number_1 = number_of_items/100.0; 
        int number_2=0;
        double number_3=0;
        int number_4=0;     

        boolean bool_1=false;
        double number_5= ( my_string.equals("string_1") ) ? 66.4079 : 0;
        int number_6=0;

        double auxVar_array_i=0; 

        for (int i=0; i<number_of_items; i++) { 
            array_of_items_multiplied[i]=(int)Math.round(array[i]*my_var);

            if ( i >= (int)(number_2*number_1) 
                 &&
                 i <  (int)((number_2+1)*number_1) 
               )
            {
                if ( bool_1==false 
                     && auxVar_array_i!=number_5
                   ) 
                {
                    number_6++;
                    if (number_6>23) 
                        bool_1=true;
                }   
                number_3+=auxVar_array_i;
                number_4++;
            }
            else {
                if (number_4!=0) 
                    other_array[number_2]=(number_3/number_4);
                else {
                    other_array[number_2]=(number_3);
                }
                number_3=auxVar_array_i;
                number_4=1;
                number_2++;
                if (number_2>99) { 
                    number_2=99;
                }  
            }       
        }

        System.out.println("(exit 1)  my_var="+my_var);

        if (number_4!=0) 
            other_array[number_2]=(number_3/number_4);
        else {
            other_array[number_2]=(number_3);
        }       

        System.out.println("(exit 2)  my_var="+my_var);

        for (int arrayItem : array_of_items_multiplied) {           
            if (map.get(arrayItem) != null) { 
                count = map.get(arrayItem);
                count++;
                map.put(arrayItem, count);
                if (count > max) {
                    max = count;
                    result = arrayItem;
                }
            }
            else
                map.put(arrayItem, 1);
        }

        System.out.println("(exit 3)  my_var="+my_var);

        for (double number_7: other_array)
            number_8+=number_7;
        number_8=number_8/100.0;

        System.out.println("(exit 4)  my_var="+my_var);

        double number_9=(double)result; 
        double number_10=0;

        if (result==-1 && max==1) { 
            number_9=number_8*my_var;
            number_10=1; 
        }

        double[] another_array=new double[102];

        another_array[0]=(number_9/my_var);
        another_array[1]=number_10;
        System.arraycopy(other_array, 0, another_array, 2, 100);

        return another_array;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...