gpt4 book ai didi

Android - 计时器内部服务

转载 作者:行者123 更新时间:2023-11-30 03:08:01 25 4
gpt4 key购买 nike

我在 Android 服务中有一个计时器,我需要这个计时器启动一次,并且我多次调用这个服务。每次我调用 startService() 时,服务都会启动新的计时器(计时器会在调用 startService() 时执行其工作)。

这是代码

    private TimerTask notificationTask = new TimerTask() {
@Override
public void run() {
posNotification();
}
};

@Override
public void onCreate() {
super.onCreate();
notificationTimer.schedule(notificationTask, 1000L, 10 * 1000L);
}

最佳答案

您可以保留共享偏好的值或采用全局变量。最初将其设置为 0。调用服务时,检查值。如果它是 0 启动定时器并将全局值设置为 1。所以下一次,它不会启动你的定时器。这对你有意义吗?请查看我准备的示例代码,如果它能解决您的问题,请告诉我:

   package com.example.timerinservice;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

Button btnStartService;
Context context;
int service_count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

context = MainActivity.this;
btnStartService = (Button) findViewById(R.id.buttonStartService);

btnStartService.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent intent = new Intent(context, TimerService.class);
intent.putExtra("servicecount", service_count);
context.startService(intent);
service_count++;
}
});
}

}

    package com.example.timerinservice;

public class GlobalVariable {
public static boolean TIMER_STYARTED = false;
}
    package com.example.timerinservice;

import java.util.Timer;
import java.util.TimerTask;

import android.app.IntentService;
import android.content.Intent;
import android.util.Log;

public class TimerService extends IntentService {

Timer notificationTimer;
int get_service_count = 0;

public TimerService() {
super("timerservice");
}

@Override
protected void onHandleIntent(Intent intent) {
get_service_count = intent.getExtras().getInt("servicecount");
}

@Override
public void onCreate() {
super.onCreate();
if(!GlobalVariable.TIMER_STYARTED){
notificationTimer = new Timer();
notificationTimer.schedule(notificationTask, 1000L, 10 * 1000L);

GlobalVariable.TIMER_STYARTED = true;
}

}

private TimerTask notificationTask = new TimerTask() {
@Override
public void run() {
//posNotification();
Log.d("INSIDE","run() of TimerTask for: "+get_service_count);
}
};
}

关于Android - 计时器内部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21456927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com