2015-01-14 49 views
0

我在執行第一個循環的9秒後執行第二個循環。這是棘手的部分。有沒有什麼辦法可以讓我確認正在執行的第一個循環,然後才執行第二個循環。我不想定時器和延遲,因爲它是非常危險的Android - 如何執行一個循環,獲得完成確認,然後執行另一個循環

第一個循環:

if (!adminpermissiondenied) { 
       if (!pattern && !pinorpassword) { 
       /*Set Password*/ 
        //Toast.makeText(context, "Setting Password", Toast.LENGTH_SHORT).show(); 
        Log.d("Admin", "Setting Password"); 
        devicePolicyManager.setPasswordQuality(demoDeviceAdmin,DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED); 
        devicePolicyManager.setPasswordMinimumLength(demoDeviceAdmin, 5); 
        boolean result = devicePolicyManager.resetPassword("123456", DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY); 
        //Toast.makeText(context, "Password set : " + result, Toast.LENGTH_SHORT).show(); 
        Log.d("Admin", "Password set : " + result); 
        /*Set Password ends*/ 
       /*Set Password ends*/ 
       } 
       } 

第二環:當你完成第一

/*Execute Checker Async Task with a delay of 9 seconds after Password is set*/ 
        new Timer().schedule(new TimerTask() { 
        @Override 
        public void run() { 
         Log.d("Admin", "Executing Checker Task"); 
         //Toast.makeText(context, "Executing Checker Task", Toast.LENGTH_SHORT).show(); 
         new checker().execute(); 
        } 
        }, 9000); //After 9 seconds of setting password*/ 
        /*Execute Checker Async Task with a delay of 9 seconds after Password is set ends*/ 

回答

2

使用接口回調。

例如創建這樣一個接口:

public interface OnTaskCompletedListener{ 
    void onTaskCompleted(); 
} 

然後把你的第一個while在接受OnTaskCompletedListener的方法,一旦完成,調用onTaskCompleted()

private void doFirstTask(OnTaskCompletedListener listener){ 

    while(someConditionIsTrue){ 
     // execute 
    } 

    // if we got this far, it means the while has finished its job, 
    // so we can use the listener to notify for completion. 
    listener.onTaskCompleted(); 
} 

現在把你的第二個while循環以另一種方法啓動第一個任務,並偵聽完成。

private void doSecondTask(){ 
    doFirstTask(new OnTaskCompletedListener(){  
     // this code will execute when the first method will complete, 
     // so you can start here your second loop 
     while(someConditionIsTrue){ 
      // execute 
     } 
    }); 
} 
1

你不能讓一個布爾變量真循環,然後在執行第二個循環之前檢查該變量,或者從您知道第一個循環完成的地方調用第二個循環。

+0

對於第二個循環應該在第一個循環內。我不認爲這是有意的。 –

相關問題