我在android服务上做项目,在我的项目中,我使用按钮启动天文钟,如果我关闭了该应用程序,我需要保持天文钟的状态,你们可以帮我吗?
我对Main Activity.java的代码是
public void onClick(View v) {
if(v==let_break){
startService(new Intent(MainActivity.this,runBackground.class));
Toast.makeText(getApplicationContext(),"I've got this!",Toast.LENGTH_SHORT).show();
chronometer.setVisibility(View.VISIBLE);
chronometer.start();
timer_running=true;
//let_break.setText("stop");
let_break.setVisibility(View.INVISIBLE);
stop_break.setVisibility(View.VISIBLE);
}
if(v==stop_break){
chronometer.stop();
timer_running=false;
let_break.setVisibility(View.VISIBLE);
stop_break.setVisibility(View.INVISIBLE);
stopService(new Intent(MainActivity.this,runBackground.class));
}}
我的服务代码是
public class runBackground extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent,int flags, int startId) {
Toast.makeText(runBackground.this,"service started",Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
Toast.makeText(runBackground.this,"service stoped.",Toast.LENGTH_LONG).show();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}}
我的清单是
<application>
<service android:name=".runBackground" android:exported="false"></service>
</application>
当我单击“开始”按钮吐司显示服务已启动停止按钮显示其已停止 但是当查看正在运行的进程背景时,它表明应用程序服务正在运行,但计时器和按钮已重置。 即使我关闭应用程序,也应该如何保持动作和天文钟表。
答案 0 :(得分:1)
由于您要在执行之间重置这些值-似乎您需要将数据持久保存到本地存储中。 最简单的方法是使用SharedPreferences。 您可以添加一个简单的帮助程序类:
public class MySharedPreferences {
private static final String PREF_FILENAME = "mybestprefs";
public static void putPrefLong(Context context, String key, long value){
SharedPreferences prefs = context.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putLong(key, value);
boolean commitResult = editor.commit();
if (!commitResult){
Log.e(TAG, "commit failed. key - "+key+", value - "+value);
}
}
public static long getPrefLong(Context context, String key, long defValue){
SharedPreferences prefs = context.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
return prefs.getLong(key, defValue);
}
}
在您的chronometer.start()
内:
startTimestamp = System.currentTimeMillis();
MySharedPreferences.putPrefLong(context, "start_ts", startTimestamp);
在您的chronometer.stop()
内:
// calculate elapsed time:
long elapsedTimeSinceStart = System.currentTimeMillis() - MySharedPreferences.getPrefLong(context, "start_ts", 0);
答案 1 :(得分:0)
在单独的过程中运行服务
android:process=":something"
答案 2 :(得分:-2)
使用服务有一个很大的缺点,因为Android Oreo及更高版本并不真正支持后台服务。您应该考虑JobIntentSerivce。 Go through this website,以便更好地理解。