更改活动时不要停止计时器

时间:2012-03-30 14:37:21

标签: java android timer chronometer

例如:在Activty AI中有Chronometer,我点击播放开始播放,当它到达00:00:10时我决定转到Activity B我会在返回A之前停留30秒钟。我会发现计时器暂停仍显示00:00:10,但我希望看到它仍在运行,然后在00:00:40。我怎样才能做到这一点?如何避免计时器暂停更改Activity

1 个答案:

答案 0 :(得分:1)

(根据Get time of chronometer widget给出的答案,添加了代码和额外活动。)

主要活动:

package com.so.chilledrat.chronoexample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;
import android.widget.Toast;

public class ChronoExampleActivity extends Activity {
    Chronometer mChronometer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        mChronometer = new Chronometer(this);
        layout.addView(mChronometer);

        Button startButton = new Button(this);
        startButton.setText("Start");
        startButton.setOnClickListener(mStartListener);
        layout.addView(startButton);

        Button stopButton = new Button(this);
        stopButton.setText("Stop");
        stopButton.setOnClickListener(mStopListener);
        layout.addView(stopButton);

        Button resetButton = new Button(this);
        resetButton.setText("Reset");
        resetButton.setOnClickListener(mResetListener);
        layout.addView(resetButton);

        Button switchButton = new Button(this);
        switchButton.setText("Switch Activity");
        switchButton.setOnClickListener(mSwitchListener);
        layout.addView(switchButton);

        setContentView(layout);
    }

    private void showElapsedTime() {
        long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
        Toast.makeText(this, "Elapsed milliseconds: " + elapsedMillis, Toast.LENGTH_SHORT).show();
    }

    View.OnClickListener mStartListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.start();
            showElapsedTime();
        }
    };

    View.OnClickListener mStopListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.stop();
            showElapsedTime();
        }
    };

    View.OnClickListener mResetListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
            showElapsedTime();
        }
    };

    View.OnClickListener mSwitchListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(ChronoExampleActivity.this.getBaseContext(), OtherActivity.class);
            startActivityForResult(myIntent, 0);
        }
    };
}

要切换到的其他活动:

package com.so.chilledrat.chronoexample;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

public class OtherActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        Button switchButton = new Button(this);
        switchButton.setText("Switch Back");
        switchButton.setOnClickListener(mSwitchListener);
        layout.addView(switchButton);

        setContentView(layout);
    }

    View.OnClickListener mSwitchListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Intent myIntent = new Intent(OtherActivity.this.getBaseContext(),
            // ChronoExampleActivity.class);
            // startActivityForResult(myIntent, 0);
            finish();
        }

    };
}

最后清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.so.chilledrat.chronoexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ChronoExampleActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="OtherActivity"></activity>
    </application>

</manifest>