Advertisement
SpyMomiji

Android Handler as Post

Apr 30th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.22 KB | None | 0 0
  1. public class MainActivity extends AppCompatActivity {
  2.  
  3.     @Override
  4.     protected void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.activity_main);
  7.  
  8.         safeFlag = false;
  9.         if(onProcessFlag){
  10.             synchronized (handler){
  11.                 handler.sendEmptyMessage(0);
  12.             }
  13.         }
  14.  
  15.     }
  16.  
  17.     @Override
  18.     protected void onDestroy() {
  19.         safeFlag = true;
  20.         super.onDestroy();
  21.     }
  22.  
  23.     static private final RingList<Runnable> runtimeProcess = new RingList<>(); //Source code: https://pastebin.com/Ci1rxFDr
  24.     static private final TreeMap<Integer, Runnable> delayProcess = new TreeMap<>();
  25.     static private int delayProcessCount = 1;
  26.     static private boolean onProcessFlag = false;
  27.     static private boolean safeFlag = false;
  28.  
  29.     static private Handler handler = new Handler(){
  30.         @Override
  31.         public void handleMessage(Message msg) {
  32.             Runnable $;
  33.             if(msg.what==0){
  34.                 if(safeFlag) return;
  35.                 onProcessFlag = false;
  36.                 do {
  37.                     if(($=runtimeProcess.shift())!=null)
  38.                         $.run();
  39.                 } while (runtimeProcess.size()!=0);
  40.             } else {
  41.                 synchronized (delayProcess){
  42.                     $=delayProcess.remove(msg.what);
  43.                 }
  44.                 if($!=null){
  45.                     if(safeFlag){
  46.                         MainActivity.post($);
  47.                     } else {
  48.                         $.run();
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.     };
  54.  
  55.     static synchronized private void post(Runnable runnable){
  56.         runtimeProcess.push(runnable);
  57.         if(onProcessFlag) return;
  58.         onProcessFlag = true;
  59.         synchronized (handler){
  60.             handler.sendEmptyMessage(0);
  61.         }
  62.     }
  63.  
  64.     static synchronized private void postDelay(Runnable runnable, long delay){
  65.         int pc = delayProcessCount++;
  66.         synchronized (delayProcess){
  67.             delayProcess.put(pc, runnable);
  68.         }
  69.         synchronized (handler){
  70.             handler.sendEmptyMessageDelayed(pc, delay);
  71.         }
  72.     }
  73.  
  74.     static private MainActivity self; {self = this;}
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement