2012-10-23 86 views
0

我有一个应用,该应用在背景(也当屏幕已swiched关闭)做的东西在一个服务。我在以下代码的Activity中启动该服务。服务与AlarmManager

Intent i=new Intent(this, AppService.class); 
i.putExtra(AppService.VOL_ALM, amanager.getStreamVolume(amanager.getStreamVolume(AudioManager.STREAM_ALARM))); 

PendingIntent pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.cancel(pi); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *60, pi); 

在trhe服务的代码看起来是这样的:

public int onStartCommand(Intent intent, int flags, int startId) { 

    test = intent.getIntExtra(VOL_ALM, 0); 


    timer = new Timer("TweetCollectorTimer"); 
    timer.schedule(updateTask, 0, 15 * 1000L); 

    return(START_NOT_STICKY); 
    } 

在服务我必须要改变的变量“test”,并使用它。但我总是失去变量的值,因为onStartCommand有时会执行。我尝试存储具有首选项的变量,但在启动服务时我还需要变量的原始值。 最好的方法是从方法中的意图改变数据“VOL_ALM”。但那有可能吗?

在此先感谢

+0

你能坚持一个数组的SharedPreferences,并用'System.arraycopy(...)'重建。 (0 - 1 VOL_ARM,1 - 2 VOL_ARM)... O(N)...诶.. :(用它来箱前/重新创建每个“报警事件”列表中,我会考虑的架构变化 - 就像IPC消息和与该消息的服务交易。 – bgs

回答

1

储存在SharedPreferences两个值?这是坚持价值观的可接受方法。

+0

当我重新启动我从意向需要的数据服务的问题。但是,当服务在后台运行onStartCommand()有时被称为。我不知道从开始的区别该服务在后台运行,因为onStartCommand被称为在这两种情况下 – user1390816

+1

@ user1390816:。您的服务的负荷'的onCreate(从后备存储器中的数据)' – CommonsWare

+0

非常感谢你,我认为这应该工作,我删除onCreate()并在onStartCommand()中加载它,我会发布如果它工作。 – user1390816