2017-02-24 68 views
1

所以我有这个代码,它有一个10秒定时器的服务倒数计时器。我想要做的是在onFinish()方法中,即使当我在应用程序之外时,我也想自动启动Activity(即MainActivity)。定时器后启动一个活动

public class TimeDisplayTimerTask extends TimerTask{ 
    CountDownTimer timer; 

    NotificationCompat.Builder notification; 
    private static final String TAG="com.timer"; 
    private Handler mHandler = new Handler(); 

    @Override 
    public void run() { 

    // run on another thread 
    mHandler.post(new Runnable() { 

     @Override 
     public void run() { 

      // display toast 
     timer = new CountDownTimer(10000, 1000) { 
      @Override 
      public void onFinish(){ 

      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
      Log.i(TAG,"" + millisUntilFinished/1000); 

      } 
     }; 
     timer.start(); 
     } 

    }); 

    } 
} 
+0

做的更好的服务,并MainActivity的设定午餐模式SingleTask –

回答

0

也许你将不得不重写生命周期方法的,还可以使用PARTIAL_WAKE_LOCK让CPU运行,直到你完成执行,如果用户锁屏。

1

试试这个在10秒后打开你的主要活动。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // launch your main activity here and finish your current activity 
     } 
    }, 10000); 
} 
0

如果您在服务内部,那么只需使用intent启动您的活动。把这个代码在你onFinish()方法:

Intent i = new Intent(); 
i.setClass(this, MainActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 
0

您NEET到活动情境传递到您的TimeDisplayTimerTask:

public class TimeDisplayTimerTask extends TimerTask{ 
CountDownTimer timer; 

NotificationCompat.Builder notification; 
private static final String TAG="com.timer"; 
private Handler mHandler = new Handler(); 
private Activity mActivity; 

public TimeDisplayTimerTask(Activity activity){ 
    mActivity = activity; 
    super(); 
} 

@Override 
public void run() { 

    // run on another thread 
    mHandler.post(new Runnable() { 

     @Override 
     public void run() { 

     // display toast 
     timer = new CountDownTimer(10000, 1000) { 
      @Override 
      public void onFinish(){ 
        if (activity != null { 
         Intent startIntent = new Intent(activity, MainActivity.class); 
         startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
         activity.startActivity(startIntent); 
        }  
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
       Log.i(TAG,"" + millisUntilFinished/1000); 

      } 

     }; 
     timer.start(); 
    } 

}); 

} 
}