Java 安卓服务&x2B;计数器不工作
我正在建立一个应用程序,可以计算屏幕上的时间。首先,我构建了一个服务,将计数计时器值(如00:00)发送到Java 安卓服务&x2B;计数器不工作,java,android,service,counter,Java,Android,Service,Counter,我正在建立一个应用程序,可以计算屏幕上的时间。首先,我构建了一个服务,将计数计时器值(如00:00)发送到MainActivity,下面是我的服务实现 public class MyService extends Service { String time; Intent io; @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated
MainActivity
,下面是我的服务实现
public class MyService extends Service {
String time;
Intent io;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return START_STICKY;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
try{
PowerManager power=(PowerManager) getSystemService(POWER_SERVICE);
boolean isScreenOn=power.isScreenOn();
while(isScreenOn){
try{
StopWatch count=new StopWatch();
long timer=count.getTime();
long seconds=timer/1000;
time = String.format("%02d:%02d", (seconds % 3600) / 60, (seconds % 60));//creating time
}catch(Exception e){
e.printStackTrace();
}
io=new Intent("COUNTDOWN_UPDATED");
io.putExtra("countdown",time);
sendBroadcast(io);// sending time value
}
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
这里是org.apache.commons.lang.time.StopWatch中的StopWatch类,它可以从0开始计算计时器。
这是我的main活动
实现
Intent service=new Intent(this,MyService.class);
startService(service);
registerReceiver(updateGUI,new IntentFilter("COUNTDOWN_UPDATED"));
private BroadcastReceiver updateGUI=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
TextView countdown= (TextView)findViewById(R.id.textView1);
countdown.setText(intent.getExtras().getString("countdown"));
}
};
当我运行我的应用程序时,计数器没有运行它停留在00:00
@覆盖
公共int onStartCommand(Intent i、int标志、int startId){
从文档中:
启动命令
每次客户端通过调用显式启动服务时由系统调用
android.content.Context.startService,提供它提供的参数和唯一的整数标记
表示启动请求。不要直接调用此方法。
为了向后兼容,默认实现调用onStart并返回START\u
或者启动粘性兼容性。
如果您需要应用程序在API级别5之前的平台版本上运行,则可以使用以下
模型来处理这种情况下较旧的onStart回调
而作为:
onCreate()
首次创建服务时由系统调用。不要直接调用此方法。
重写:服务中的onCreate()
如果您只想随时间在文本视图中设置值的动画,为什么不使用值动画制作工具呢?
例如:
ValueAnimator animator = new ValueAnimator();
animator.setObjectValues(0, percentage);
animator.addUpdateListener(new AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
prog.setText("Profile Progress: "+String.valueOf(animation.getAnimatedValue())+"%");
}
});
animator.setEvaluator(new TypeEvaluator<Integer>() {
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
return Math.round((endValue - startValue) * fraction);
}
});
animator.setDuration(1500);
animator.start();
ValueAnimator animator=新的ValueAnimator();
animator.setObjectValue(0,百分比);
addUpdateListener(新的AnimatorUpdateListener(){
动画更新上的公共无效(ValueAnimator动画){
prog.setText(“概要文件进度:+String.valueOf(animation.getAnimatedValue())+“%”);
}
});
animator.setEvaluator(新的TypeEvaluator(){
公共整数求值(浮点分数、整数起始值、整数结束值){
返回数学舍入((endValue-startValue)*分数);
}
});
设置持续时间(1500);
animator.start();
虽然不是很明显,但在Android上,默认情况下在应用程序的UI线程上执行服务
为了减轻工作量,工具箱中有一个方便的类IntentService
,用于启动您希望在后台执行的工作
让类扩展IntentService
后,重写onHandleIntent(Intent-Intent)
方法,并将广播生成代码放在其中,而不是放在onCreate
中
这将释放您的UI线程以继续按预期运行
(注意,在您的循环中,您永远不会更新isScreenOn
的值,因此它将始终保持不变!)另外,请输入日志,这将有助于我们了解问题的原因。谢谢。它已经工作了,但现在计数器没有运行,它停留在00:00。您可以将其作为单独的问题发布:)您只想在文本视图中更新值吗?服务不是开销吗?是的,这是我想在TextViewThank@sddamico中更新的唯一值在android中,还有其他方法可以进行计时器计数吗?是的,我想看看处理程序
类,它允许您以所需的毫秒延迟发布可运行的
操作。如果您想做一些每秒都在滴答作响的事情,您可以这样做:Handler.postDelayed(new MyRunnable(),1000);