Android рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рдХрддрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░

рдХрд╛рдо рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдПрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рд╣реБрдЖ: рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЪрд┐рддреНрд░ рдФрд░ рд╡рд┐рд╡рд░рдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рджреЗрд░реА рдХрд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд┐рдЪ рдкрд░, рдЬрд╛рдБрдЪ рдХреА рдХрд┐ рдХрд┐рддрдиреЗ рддрддреНрд╡ рдХрддрд╛рд░ рдореЗрдВ рдмрдиреЗ рд╣реБрдП рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдПрдХ рдФрд░ рддрддреНрд╡ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рдорд▓рд╛ 3. рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рд╕реНрдерд┐рд░ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдлреЛрди рдкрд░ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдХреНрд╖рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдпрд╛ рджреЛ рдЖрдЗрдЯрдо рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рд╕реЗред рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдХреНрдпреЛрдВ рди рдЗрд╕ рдирдВрдмрд░ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?

рд╡рд┐рд╡рд░рдг

рдХрддрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдЫреЛрдЯреА рдирд┐рд░реНрдгрдп рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХрд▓-рдкрд░рдд рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ:

рдореИрдВрдиреЗ рддреБрд░рдВрдд GUI рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЧрдгрдирд╛рдУрдВ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдЪ рдХреЗ рджреМрд░рд╛рди рд╣реА, рдХреНрдпреЛрдВрдХрд┐ рдХрддрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрд┐рддрдиреА рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреЛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдиреАрдВрдж рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде, рдЬреЛ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рдкрд░рд┐рдорд╛рдг рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрд╖ рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЫрд╣ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╣реЛрдВ, рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рд░ рд╣реИ), рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд╕реАрдорд╛ рддрдХ ~ [-20; 20]ред рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдп рдФрд░ рд╡рд░реНрддрдорд╛рди рдПрдХ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА
рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдЪрд░ private double connectionType=0; рдЯрд╛рдЗрдк private double connectionType=0; )
NetworkInfo рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
NetworkInfo activeNetwork = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ
if (!activeNetwork.isConnectedOrConnecting()) return;
рдЖрдЧреЗ
connectionType = (activeNetwork.getType()); // EDGE = 0; WiFi = 1

рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЕрдВрддрд░рд╛рд▓ (рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ private long tapInterval = 5000; private byte tapTrigger = 0; private double tapAssemblyAverage = 5000;private long nextTap = 0; private long lastTap = 0; )
рдЕрдВрддрд░рд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
 public synchronized void setNextTap(long nextTap) { this.lastTap=this.nextTap; this.nextTap = nextTap; if (nextTap > lastTap) { tapInterval = nextTap - lastTap; lastTap = nextTap; } if (tapInterval > TAP_INTERVAL_UPPER_THRESHOLD) tapInterval = TAP_INTERVAL_UPPER_THRESHOLD; if (tapInterval < 100) tapInterval = 100; tapAssemblyAverage = (tapAssemblyAverage * tapTrigger + tapInterval) / (++tapTrigger); } 
рдЬрд┐рд╕реЗ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред TAP_INTERVAL_UPPER_THRESHOLD , рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 10,000 ms рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рдФрд╕рдд рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ tapTrigger рд╣реИ, рддреЛ tapTrigger рд░реАрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ

рд╕реНрд╡рд┐рдЪ рджреЗрд░реА (рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ private long delayInterval = 500; private long finishDelay = 0; private long startDelay = 0; )
рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпрд╛рдБ
 public synchronized void setStartDelay(long start) { this.startDelay = start; } public synchronized void setFinishDelay(long finish) { this.finishDelay = finish; if (finishDelay > startDelay) { delayInterval = finishDelay - startDelay; } } 
рдЕрдВрддрд┐рдо рджреЗрд░реА рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рджреЗрд░реА рдХрд╛ рдФрд╕рдд рдореВрд▓реНрдп рдирд╣реАрдВред

рдлреНрд░реА рд░реИрдо (рд╡реИрд░рд┐рдПрдмрд▓ private long freeRam = 5000000; )
рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд╡рд░реНрддрдорд╛рди рд╕рдВрддреБрд▓рди рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рд░реИрдо рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ рдирд╣реАрдВред
 freeRam = Runtime.getRuntime().freeMemory(); 


рдорд╛рдирдХреАрдХрд░рдг
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдореВрд▓реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рднрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рд╕рдВрдмрдВрдз / рд╡рдЬрди double[][] RW = new double[2][5]; рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдерд┐рд░рд╛рдВрдХ
 private static final int TAP_EQUALIZER = 1000; private static final int DELAY_EQUALIZER = 1000; private static final int RAM_EQUALIZER = 1000000; private static final int TAP_INTERVAL_UPPER_THRESHOLD = 10000; private static final int DELAY_INTERVAL_UPPER_THRESHOLD = 5000; private static final int NORMAL_TAP_INTERVAL = 9; private static final int TAP_I = 0; private static final int DELAY_I = 1; private static final int CONNECTION = 2; private static final int RAM = 3; private static final int QUEUE = 4; 

 private synchronized void normalization() { if (delayInterval > DELAY_INTERVAL_UPPER_THRESHOLD) delayInterval = DELAY_INTERVAL_UPPER_THRESHOLD; if (delayInterval < 0) delayInterval = 0; if (connectionType > 1 || connectionType < 0) connectionType = 0.5; connectionType = (connectionType - 2) * 2; if (freeRam < 100000 || freeRam > 10000000) freeRam = 5000000; } private void cast() { RW[0][TAP_I] = (NORMAL_TAP_INTERVAL - (tapAssemblyAverage / TAP_EQUALIZER)); RW[0][DELAY_I] = (double) (delayInterval / DELAY_EQUALIZER); RW[0][CONNECTION] = connectionType; RW[0][RAM] = (double) (freeRam / RAM_EQUALIZER); RW[0][QUEUE] = (double) (count); } 


рднрд╛рд░
рддрд░рд╛рдЬреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдХрд╣рдирд╛ рдмрд╛рдХреА рд╣реИред рдЙрдиреНрд╣реЗрдВ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдпрд╛ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕реЗрд▓ рдореЗрдВред рдореИрдВрдиреЗ рд╡рдЬрди рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд┐рд░реНрдл рдкрд░рд┐рдгрд╛рдо рджреВрдВрдЧрд╛:
 private void setInitialWeights() { RW[1][TAP_I] = 0.5; RW[1][DELAY_I] = 1; RW[1][CONNECTION] = -1; RW[1][RAM] = 0.1; RW[1][QUEUE] = -0.1; } 

рдирддреАрдЬрддрди, рдХрддрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рд░реЛрдзрд╛рддреНрдордХ рдмрдВрдзрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЕрдВрддрд░рд╛рд▓ рдпрд╛ рддреЛ рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрдВрдзрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЧрдгрдирд╛
рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ, рдХрддрд╛рд░ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдорд╛рдирдХ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рдмрдбрд╝реЗ рдкреВрд░реНрдгрд╛рдВрдХ рддрдХ рдЗрд╕реЗ рдЧреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрджреНрдпрддрди рдЕрдВрддрд░рд╛рд▓ рдХреА рдЧрдгрдирд╛ рднреА рдпрд╣рд╛рдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдХрддрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд┐рд░рдВрддрд░ int SLEEP_COMPARISON_THRESHOLD = 2 рдХреЗ рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдВрддрд░рд╛рд▓ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред
рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рдЪрд░
 private static final int SLEEP_COMPARISON_THRESHOLD = 2; private static final int SLEEP_ADDITION_INC_STEP = 100; private static final int SLEEP_ADDITION_DEC_STEP = -500; private long sleepInterval = 500; 

 private int activation() { double value = 0; for (int i = 0; i < 5; i++) value += RW[0][i] * RW[1][i]; sleepInterval += ((Math.abs(count - value) > SLEEP_COMPARISON_THRESHOLD || sleepInterval > 10000)) ? SLEEP_ADDITION_DEC_STEP : SLEEP_ADDITION_INC_STEP; if (sleepInterval < 500) sleepInterval = 500; Log.d("QUEUE", "sleep: " + String.valueOf(sleepInterval)); if (value < 1) value = 1; Log.d("QUEUE", "queue: " + String.valueOf(value)); return (int) Math.ceil(value); } 


рдкреВрд░реНрдг рдХреЛрдб
 public class IntellijQueue extends Thread { private static final int TAP_I = 0; private static final int DELAY_I = 1; private static final int CONNECTION = 2; private static final int RAM = 3; private static final int QUEUE = 4; private static final int TAP_EQUALIZER = 1000; private static final int DELAY_EQUALIZER = 1000; private static final int RAM_EQUALIZER = 1000000; private static final int SLEEP_COMPARISON_THRESHOLD = 2; private static final int SLEEP_ADDITION_INC_STEP = 100; private static final int SLEEP_ADDITION_DEC_STEP = -500; private static final int TAP_INTERVAL_UPPER_THRESHOLD = 10000; private static final int DELAY_INTERVAL_UPPER_THRESHOLD = 5000; private static final int NORMAL_TAP_INTERVAL = 9; public volatile int count = 3; private long finishDelay = 0; private long startDelay = 0; private long nextTap = 0; private long lastTap = 0; private long sleepInterval = 500; private double connectionType = 0; private long tapInterval = 5000; private long delayInterval = 500; private long freeRam = 5000000; private double RW[][]; private byte tapTrigger = 0; private double tapAssemblyAverage = 5000; private NetworkInfo activeNetwork; public IntellijQueue(Context context) { this.setPriority(MIN_PRIORITY); this.setDaemon(true); activeNetwork = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); RW = new double[2][5]; setInitialWeights(); lastTap = System.currentTimeMillis(); } private void setInitialWeights() { RW[1][TAP_I] = 0.5; RW[1][DELAY_I] = 1; RW[1][CONNECTION] = -1; RW[1][RAM] = 0.1; RW[1][QUEUE] = -0.1; } private void cast() { RW[0][TAP_I] = (NORMAL_TAP_INTERVAL - (tapAssemblyAverage / TAP_EQUALIZER)); RW[0][DELAY_I] = (double) (delayInterval / DELAY_EQUALIZER); RW[0][CONNECTION] = connectionType; RW[0][RAM] = (double) (freeRam / RAM_EQUALIZER); RW[0][QUEUE] = (double) (count); } private int activation() { double value = 0; for (int i = 0; i < 5; i++) value += RW[0][i] * RW[1][i]; sleepInterval += ((Math.abs(count - value) > SLEEP_COMPARISON_THRESHOLD || sleepInterval > 10000)) ? SLEEP_ADDITION_DEC_STEP : SLEEP_ADDITION_INC_STEP; if (sleepInterval < 500) sleepInterval = 500; Log.d("QUEUE", "sleep: " + String.valueOf(sleepInterval)); if (value < 1) value = 1; Log.d("QUEUE", "queue: " + String.valueOf(value)); return (int) Math.ceil(value); } private synchronized void updateValues() { if (!activeNetwork.isConnectedOrConnecting()) return; connectionType = (activeNetwork.getType()); // EDGE = 0; WiFi = 1 tapTrigger=0; freeRam = Runtime.getRuntime().freeMemory(); Log.d("QUEUE", "tap interval: " + String.valueOf(tapInterval)); Log.d("QUEUE", "delay interval: " + String.valueOf(delayInterval)); Log.d("QUEUE", "free RAM: " + String.valueOf(freeRam)); normalization(); cast(); } private synchronized void normalization() { if (delayInterval > DELAY_INTERVAL_UPPER_THRESHOLD) delayInterval = DELAY_INTERVAL_UPPER_THRESHOLD; if (delayInterval < 0) delayInterval = 0; if (connectionType > 1 || connectionType < 0) connectionType = 0.5; connectionType = (connectionType - 2) * 2; if (freeRam < 100000 || freeRam > 10000000) freeRam = 5000000; } @Override public void run() { try { while (true) { updateValues(); count = activation(); sleep(sleepInterval); } } catch (InterruptedException e) { } } public synchronized void setStartDelay(long start) { this.startDelay = start; Log.d("QUEUE", "S Ok."); } public synchronized void setFinishDelay(long finish) { this.finishDelay = finish; Log.d("QUEUE", "F Ok."); if (finishDelay > startDelay) { delayInterval = finishDelay - startDelay; } } public synchronized void setNextTap(long nextTap) { this.lastTap=this.nextTap; this.nextTap = nextTap; if (nextTap > lastTap) { tapInterval = nextTap - lastTap; lastTap = nextTap; } if (tapInterval > TAP_INTERVAL_UPPER_THRESHOLD) tapInterval = TAP_INTERVAL_UPPER_THRESHOLD; if (tapInterval < 100) tapInterval = 100; tapAssemblyAverage = (tapAssemblyAverage * tapTrigger + tapInterval) / (++tapTrigger); } } 

рдкрд░рд┐рдгрд╛рдо

рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдореЗрдВ рджреЗрд░реА рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред рдЬрдм рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрддрд╛рд░ 2 рд╕реЗ 11. рддрдХ рд╣реЛрддреА рд╣реИ: рд╕реИрдорд╕рдВрдЧ рдЧреИрд▓реЗрдХреНрд╕реА рдПрд╕ 2, рдЧреИрд▓реЗрдХреНрд╕реА рдПрд╕ 3, рд╕реИрдорд╕рдВрдЧ рдЬреАрдУ, рдореЛрдЯрд░реЛрд▓рд╛ рдПрдЯреНрд░реАрдХреНрд╕ 2, рдиреЗрдХреНрд╕рд╕, рдПрдХреНрд╕рдкреНрд▓реЗ рдЯреИрдмрд▓реЗрдЯред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдерд╛ред

Source: https://habr.com/ru/post/In171173/


All Articles