Android - 后台活动

时间:2016-03-08 12:53:40

标签: android

我有一个非常烦人的问题,我现在一直试图解决这个问题......

所以,我有活动A和活动B.你可以从A导航到B.当我导航到活动B时,我创建了一个我想在后台运行的计时器,只测量自按下按钮后的时间但是,当我回到活动A并尝试再次导航到B时,我发现它重置回原始状态,尽管事实上我没有销毁它。有没有什么方法可以让它在后台工作,或者在我导航回来时没有重置?

1 个答案:

答案 0 :(得分:0)

正如您所指出的那样,您无法在活动B中拥有某个属性,并希望它能够在整个应用程序生命周期中存活下来。正如我在评论中提到的,您需要Application类实例来维护这些属性。所以我提供相同的代码。我没有面对你在评论中提到的任何问题,请检查一下,并知道是否有任何问题:)

package com.example.sandeepbhandari.myapplication;
import android.app.Application;

/**
 * Created by sandeepbhandari on 3/3/16.
 */
    public class AppService extends Application{
    private static AppService sInstance;
    long timeElapsed = 0;
    Timer t;
    TimerTask task;

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }

    public void startTimer(){
        t = new Timer();
        task = new TimerTask() {

            @Override
            public void run() {
                timeElapsed ++;
            }
        };
        t.scheduleAtFixedRate(task, 0, 1000);
    }


    public void stopTimer(){
        if(t != null) {
            t.cancel();
        }
    }

    public static AppService getInstance() {
        return sInstance;
    }
}

要使用此应用程序类,您需要更新manifest.xml文件

<application
    android:name=".AppService"

如果您想要启动计时器(在您的情况下,在活动B中按钮的onClickListener),只需调用

AppService service = AppService.getInstance();
service.startTimer();

停止只需致电

AppService service = AppService.getInstance();
service. stopTimer();

只要您想看到时间过去,只需说出Log.d("sandeep", "" + service.timeElapsed);

即可

我发现这个问题:你还有问题吗? lemme知道:)