android在关闭应用程序或重启设备时调用方法

时间:2014-04-04 23:03:22

标签: android sharedpreferences ondestroy

当我手动关闭应用程序或重启设备但我的代码似乎不起作用时,我试图让我的应用程序节省计时器的时间。

我做错了什么?如果我将以下方法分配给按钮,则onCreate可以工作。当应用程序关闭时,我无法自动启动它。

protected void onDestroy() {
        final Chronometer chrono9 = (Chronometer) findViewById(R.id.chronometer1);



        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong("time", chrono9.getBase());
        editor.commit();
        super.onDestroy();

    }




protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mydialog);





    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        Chronometer chrono9 = (Chronometer)findViewById(R.id.chronometer1);
        chrono9.setBase(settings.getLong("time",11));

2 个答案:

答案 0 :(得分:2)

你在服务中实现这个...... ???你需要做的是实现一个服务,当用户关闭应用程序时,该服务将开始运行,你必须实现一个广播接收器,这样你才能知道手机重启的时间......

这将是一个班级......

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Intent startServiceIntent = new Intent(context, MyService.class);
    context.startService(startServiceIntent);
}

这就在你的清单中...... !!

<receiver android:name="com.solmoviles.tmp.StartMyServiceAtBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

任何进一步的问题我都非常乐意提供帮助!

答案 1 :(得分:0)

我在特定情况下做的事情是将计时器存储在共享的pref中,方法与我启动时相同。

现在,当我重新启动应用程序时,时间继续滴答,并且没有从我关闭应用程序时的位置重置。

在我启动计时器的方法中:

...
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong("time", chrono9.getBase());
        editor.commit();

...

在我的创作中:

   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        Chronometer chrono9 = (Chronometer)findViewById(R.id.chronometer1);
        chrono9.setBase(settings.getLong("time",11));

...

        chrono1 = (Chronometer) findViewById(R.id.chronometer1);

...
        chrono1.start();