appプログラムはバックグラウンドに入るか、携帯電話の画面を閉じて、開いているタイマータスク(timersのカウントタスクを使用)が引き続き実行されることを確認します.
3098 ワード
需要:appプログラムはバックグラウンドに入るか、携帯電話の画面を閉じて、開いたタイマータスク(timersのカウントタスクを使用)を実行し続けます.
質問:携帯電話usbをデバッグしてコンピュータに接続して、プログラムはバックグラウンドあるいは携帯電話のスクリーンに入って閉じて、開いたタイマーの任務は正常に実行します;しかし,usbデータ線を抜くとタイマタスクがブロックされる.正常なカウントの効果は得られません.
シナリオ:新しいTimersServiceを作成し、サービスで定期的に実行するのはタスクの問題です.この場合、プログラムがバックグラウンドに入る場合のpublic class TimersService extends Service{
}問題:TimersServiceを追加し、携帯電話の画面を閉じ、タイマータスクは依然としてブロックされている.画面を閉じ、タイマータスクが正常に実行されていることを確認し、TimersServiceにPowerManagerを追加する必要がある.WakeLockは、画面がスリープした後もcpuの起動状態を維持し、サービスを継続させる.参照先:http://blog.csdn.net/sinat_33285127/article/details/76131349 public class TimersService extends Service {
}
質問:AactivityでServiceを起動し、Bactivityで起動したサービスを閉じるサービスサービスサービスサービスサービスサービスサービスを使用するstartService起動方式起動サービスコード:public void calculTime(Activity mActivity,long time){Logger.e(「サービスを起動する」);stopサービス(mActivity);currentTime=time;Intent intent=new Intent(mActivity,TimersServices.class); intent.putExtra(「currTime」,currentTime);mActivity.startService(intent);mActivity.startService(intent);intent.putExtra(「currTime」,currentTime);mActivity.startサービス(intity);}サービスを閉じるコード:public void stopService(Activity mActivity){Logger.e("サービスを閉じる");Intent intent=new Intent(mActivity,TimersServices.class);mActivity.stopService(intent);注意:サービスを開始するmActivityとサービスを終了するmActivityは同じactivityクラスではありません
サービスの2つの起動モード1 startService(グローバルモード)は、バインドモードとは異なり、1つはサービスをオンにし、いずれかのactivityはサービスをオフにします.2 bindService(バインドモード)は1つのacitivtyにバインドされ、activtyはサービスを破棄します.具体的なサービスの理解と使用の参考もあります.http://blog.csdn.net/zjws23786/article/details/51800929
質問:携帯電話usbをデバッグしてコンピュータに接続して、プログラムはバックグラウンドあるいは携帯電話のスクリーンに入って閉じて、開いたタイマーの任務は正常に実行します;しかし,usbデータ線を抜くとタイマタスクがブロックされる.正常なカウントの効果は得られません.
シナリオ:新しいTimersServiceを作成し、サービスで定期的に実行するのはタスクの問題です.この場合、プログラムがバックグラウンドに入る場合のpublic class TimersService extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent,int flags, int startId) {
long currTime = intent.getLongExtra("currTime",System.currentTimeMillis());
Logger.i("DemoLog","currTime:"+currTime);
LocalQRCodeUtil.getInstance().calculTime(currTime);//
return START_STICKY;
}
@Override
public void onDestroy() {
LocalQRCodeUtil.getInstance().stopTimer();//
super.onDestroy();
}
}問題:TimersServiceを追加し、携帯電話の画面を閉じ、タイマータスクは依然としてブロックされている.画面を閉じ、タイマータスクが正常に実行されていることを確認し、TimersServiceにPowerManagerを追加する必要がある.WakeLockは、画面がスリープした後もcpuの起動状態を維持し、サービスを継続させる.参照先:http://blog.csdn.net/sinat_33285127/article/details/76131349 public class TimersService extends Service {
*private PowerManager.WakeLock wakeLock = null;*
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
// cpu service 。
*PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TimersService.class.getName());
wakeLock.acquire();*
super.onCreate();
}
@Override
public int onStartCommand(Intent intent,int flags, int startId) {
long currTime = intent.getLongExtra("currTime",System.currentTimeMillis());
Logger.i("DemoLog","currTime:"+currTime);
LocalQRCodeUtil.getInstance().calculTime(currTime);
return START_STICKY;
}
@Override
public void onDestroy() {
//service
*if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}*
LocalQRCodeUtil.getInstance().stopTimer();
super.onDestroy();
}
}
質問:AactivityでServiceを起動し、Bactivityで起動したサービスを閉じるサービスサービスサービスサービスサービスサービスサービスを使用するstartService起動方式起動サービスコード:public void calculTime(Activity mActivity,long time){Logger.e(「サービスを起動する」);stopサービス(mActivity);currentTime=time;Intent intent=new Intent(mActivity,TimersServices.class); intent.putExtra(「currTime」,currentTime);mActivity.startService(intent);mActivity.startService(intent);intent.putExtra(「currTime」,currentTime);mActivity.startサービス(intity);}サービスを閉じるコード:public void stopService(Activity mActivity){Logger.e("サービスを閉じる");Intent intent=new Intent(mActivity,TimersServices.class);mActivity.stopService(intent);注意:サービスを開始するmActivityとサービスを終了するmActivityは同じactivityクラスではありません
サービスの2つの起動モード1 startService(グローバルモード)は、バインドモードとは異なり、1つはサービスをオンにし、いずれかのactivityはサービスをオフにします.2 bindService(バインドモード)は1つのacitivtyにバインドされ、activtyはサービスを破棄します.具体的なサービスの理解と使用の参考もあります.http://blog.csdn.net/zjws23786/article/details/51800929