Android上开发一个长达几天的倒计时小软件, 把它做成service? 还是做成能够保留在后台的Activity?

 我来答
fantacywall
2011-08-31 · TA获得超过333个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:271万
展开全部
要看你的功能了
假设不需要中途总是查看这个倒计时,长达几天的话,可以调用日历,精确到天(也可以到小时分钟)之后,收到提醒再起service。由service启动你要启动的东西。
如果你中途要查看调整这个倒计时,那你只能用service。加些属性使它可以长存。如果关机,把时间写入到文件或者preference,开机再续计时,只有一些清理程序的软件能把这个service干掉。
activity主要用途是显示页面,不同于service,android系统喜欢对这类对象进行自动回收。如果你硬要它长存也可以的,设置属性能让它存在很长时间。但不建议使用。
android还有一类硬时钟,可以在关机状态下也依然计时,并且执行一些程序,你可以google一下。
宝张万40
2011-08-31 · 超过38用户采纳过TA的回答
知道答主
回答量:184
采纳率:0%
帮助的人:112万
展开全部
很久以前写过这么个:
//TimerLabel.java
package timerlabel;

import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.lang.Thread.State;

/**
* 计时标签
* @author Jeky
*/
public class TimerLabel extends JLabel {

private int maxTime;
private int count;
private static final int SECOND = 1000;
private static final int FONT_SIZE = 36;
private Thread thread;
private boolean pause;
private boolean start;

/**
* 新建一个计时标签
* @param maxTime 倒计时起始时间
*/
public TimerLabel(int maxTime) {
this.setHorizontalAlignment(JLabel.CENTER);
this.setFont(new Font("Times New Roman", Font.BOLD, FONT_SIZE));
this.pause = false;
setMaxTime(maxTime);
}

/**
* 修改倒计时起始时间
* @param maxTime 新的起始时间
*/
public void setMaxTime(int maxTime) {
if (this.start) {
return;
}
this.maxTime = maxTime;
this.count = maxTime;
initText();
this.thread = new Thread(new Runnable() {

@Override
public void run() {
while (count != 0) {
try {
if (!start) {
count = 0;
initText();
break;
}
if (!pause) {
Thread.sleep(SECOND);
count--;
initText();
}
} catch (InterruptedException ex) {
pause = true;
}
}
done();
}
});
this.start = false;
}

/**
* 倒计时完成后调用此方法
*/
protected void done() {
JOptionPane.showMessageDialog(this, "Time up!");
}

/**
* 标签字符由此方法设置
*/
protected void initText() {
String min = String.valueOf(count / 60);
String sec = String.valueOf(count % 60);
while (min.length() < 2) {
min = "0" + min;
}
while (sec.length() < 2) {
sec = "0" + sec;
}
this.setText(min + ":" + sec);
}

/**
* 暂停
*/
public void pause() {
if (start) {
thread.interrupt();
}
}

/**
* 检测标签倒计时是否开始
* @return 如果开始返回true
*/
public boolean isStart() {
return start;
}

/**
* 得到倒计时起始时间
* @return 倒计时起始时间
*/
public int getMaxTime() {
return maxTime;
}

/**
* 检测标签倒计时是否暂停
* @return 倒计时暂停返回true
*/
public boolean isPause() {
return pause;
}

/**
* 从暂停中恢复计时
*/
public void continueDo() {
if (this.pause) {
this.pause = false;
}
}

/**
* 取消计时
*/
public void stop() {
if (start) {
start = false;
}
}

/**
* 开始计时
*/
public void start() {
if (thread.getState().equals(State.NEW)) {
start = true;
thread.start();
} else if (thread.getState().equals(State.TERMINATED)) {
setMaxTime(maxTime);
start = true;
thread.start();
}
}
}

//演示程序 Test.java
package timerlabel;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
* @author Jeky
*/
public class Test extends JFrame {

private TimerLabel label;
private static final int GAP = 10;
private JButton runButton;
private JButton pauseButton;
private JButton setButton;
private JButton stopButton;
private JTextField time;

public Test() {
label = new TimerLabel(10);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, GAP, GAP));

runButton = new JButton("Start");
runButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
label.start();
}
});
panel.add(runButton);

pauseButton = new JButton("Pause");
pauseButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
if (label.isStart()) {
if (!label.isPause()) {
label.pause();
pauseButton.setText("Continue");
} else {
label.continueDo();
pauseButton.setText("Pause");
}
}
}
});
panel.add(pauseButton);

time = new JTextField(10);
panel.add(time);

setButton = new JButton("setMaxTime");
setButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
label.setMaxTime(Integer.parseInt(time.getText()));
}
});
panel.add(setButton);

stopButton = new JButton("Stop");
stopButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
label.stop();
}
});
panel.add(stopButton);

this.getContentPane().add(label, BorderLayout.CENTER);
this.getContentPane().add(panel, BorderLayout.SOUTH);

this.setVisible(true);
this.setSize(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new Test();
}
}

试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迈克迩刘老根
2011-08-31
知道答主
回答量:9
采纳率:0%
帮助的人:4.1万
展开全部
可以尝试做成一个挂件,Service容易被干掉
追问
挂件是指可以拖到桌面的小东东吧?比如时钟、天气时钟什么的,对吧?
Service容易被干掉,是指被Android系统容易干掉,还是被人为干掉?
保留在后台的Activity这个方案 可行否?有没有什么方法比较可靠的保留Activity在后台?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式