Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓服务&x2B;计数器不工作_Java_Android_Service_Counter - Fatal编程技术网

Java 安卓服务&x2B;计数器不工作

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

我正在建立一个应用程序,可以计算屏幕上的时间。首先,我构建了一个服务,将计数计时器值(如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 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);