计时器保持在后台花费的时间

时间:2016-08-08 09:57:00

标签: android background-service chronometer

我会在我的应用中开发一项功能,点击我的活动上的按钮启动service,启动,暂停和恢复Chronometer。 但我有一个问题,如何在我的背景中开始和停止service

我创建了活动

public class StartWorkActivity extends ActivityGeneralToolbar {

    protected final void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState, R.layout.activity_start_work);
        Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer);



    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    public void startWork(View v){
        Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class);


        msgIntent.setAction("START_TIMER");
        getBaseContext().startService(msgIntent);
    }

    public void pauseWork(View v){
        Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class);
        msgIntent.setAction("PAUSE_TIMER");

    }

    public void resumeWork(View v){
       //call service
        Intent msgIntent = new Intent(StartWorkActivity.this, WorkTimerService.class);
        msgIntent.setAction("RESUME_TIMER");


    }


    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onResume() {

        super.onResume();
    }
}

我的 WorkTimerService

public class WorkTimerService extends IntentService {

    long timeWhenStopped = 0;
    Chronometer chronometer;

    public WorkTimerService() {
        super("SystemService");

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(intent.getAction() == "START_TIMER"){
            startWork();
        }
        if(intent.getAction() == "PAUSE_TIMER"){
            pauseWork();

        }if(intent.getAction() == "RESUME_TIMER"){
            resumeWork();
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags,startId);

        return START_STICKY;
    }
    public void pauseWork(){

        timeWhenStopped = chronometer.getBase() -  SystemClock.elapsedRealtime();
        chronometer.stop();
    }

    public void resumeWork(){

        chronometer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
        timeWhenStopped = 0;
        chronometer.start();

    }

    public void startWork(){

        chronometer.start();
    }
}

但我的问题是Chronometer在我的服务中显然是空的,因为我读到在服务中不可能与ui交互。 那么,我如何在背景中发送或使用Chronometer

1 个答案:

答案 0 :(得分:1)

Chronometer是Android中的UI小部件(实际上是TextView)。因此,您不能将其用于非UI目的。请尝试使用TimerCountDownTimer

有关Timer Service$vmResourceGroup = "iaas-rg"; $vmName = "ubuntu"; $destinationContainerName = "templates"; $vhdNamePrefix = "template"; $sampleOutupTemplatePath = "C:\Templates\ImagesGeneralized\sampleOutputTemplateUbuntu.json"; Login-AzureRmAccount #Dellocate the VM Stop-AzureRmVM -ResourceGroupName $vmResourceGroup -Name $vmName #Generalize the vm Set-AzureRmVM -ResourceGroupName $vmResourceGroup -Name $vmName -Generalized # Save the custom vm Image Save-AzureRmVMImage -ResourceGroupName $vmResourceGroup -VMName $vmName -DestinationContainerName $destinationContainerName -VHDNamePrefix $vhdNamePrefix -Path $sampleOutupTemplatePath 的示例用法,请参阅此处:https://stackoverflow.com/a/3819721/5250273