android 定时器 如何实现

现在需要每隔一分钟,调用一个方法,用户退出也能在后台运行,各位大神,求解决方法!!!!!!... 现在需要每隔一分钟 ,调用一个方法 ,用户退出也能在后台运行,各位大神 ,求解决方法!!!!!! 展开
 我来答
和喝呵何
2014-05-28 · TA获得超过117个赞
知道小有建树答主
回答量:233
采纳率:50%
帮助的人:136万
展开全部

可以用Service+Broadcast+Handler来实现。

Handler在Service里

在Service里主要逻辑为:用Handler实现每分钟发送一次广播

Broadcast在Activity里,内部类的形式

Broadcast接收广播并调用某某方法。


核心:Activity开启服务,让服务每隔一分钟就发送一条广播通知调用某某方法。


这是Activity里的代码

public class MainActivity extends Activity  {

public Intent startService;
//发送广播需要的Action
        public static final String BROADCAST_ACTION="broadcast.action";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

                //在这里注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(ConstantTool.BROADCAST_ACTION);
registerReceiver(myResver, filter);
                //设置服务
startService = new Intent(MusicService.SERVICE_ACTION);
startService.setClass(this, MusicService.class);
}
        //假设这是你每分钟都要调用一次的方法
private void initViews() {
}
        //这个点击事件来控制什么时候开启服务
private OnClickListener clickListener=new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startService(startService);
}
};

/**
 * 广播
 * 
 * @author Administrator
 * 
 */
class MyResver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
        //首先判断你的Action是否一致
if (BROADCAST_ACTION.equals(intent.getAction())) {

//如果一致,那么就调用方法
initVies();

}

}

}

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//销毁广播
unregisterReceiver(myResver);
}

}


Service里的代码

public class MusicService extends Service {
        //这里面的值可以随意,因为在AndroidManifest里已经注册了
        public static final String SERVICE_ACTION="service.action";
public MusicService() {
// TODO Auto-generated constructor stub
}

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}

//创建一个Handler
Handler mHandler = new Handler() {

public void handleMessage(android.os.Message msg) {
int currentTime = msg.arg1;
Intent broadcast = new Intent(MainActivity.BROADCAST_ACTION);
sendBroadcast(broadcast);
};

};
//创建一个线程
Runnable updateThread = new Runnable() {
@Override
public void run() {

if (mMediaPlayer != null) {
Message msg = mHandler.obtainMessage();
mHandler.postDelayed(updateThread, 60*1000);
}

}
};
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
//在这里判断是否是启动服务的那个Action
if (intent.getAction().equals(SERVICE_ACTION)) {
mHandler.postDelayed(updateThread, 60*1000);
}
}
}


服务绑定

<service android:name="com.seekbar.android.service.MusicService"/>
更多追问追答
追问
是每次调用销毁一次  还是销毁了就不再调用了??再问一句, ConstantTool这个是啥??
追答
是我自己定义的一个类,里面定义的是常量
GodHlpMe
2014-05-28 · TA获得超过8456个赞
知道大有可为答主
回答量:4600
采纳率:46%
帮助的人:993万
展开全部
import android.os.Handler;

Handler timer_handler;
Runnable timer_runnable;

void initTimer() // 初始定时器
{
timer_handler=new Handler();
timer_runnable=new Runnable()
{
public void run()
{ //
// 定时执行的内容 1分钟
timer_handler.postDelayed(this,60000); // this指runnable自已,再次启动
}
};
}
void startTimer() // 启动定时器
{
timer_handler.post(timer_runnable); // 立即执行runnable对象
}
void closeTimer() // 关闭定时器
{
timer_handler.removeCallbacks(timer_runnable);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JulioHu706
2014-05-28 · TA获得超过653个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:431万
展开全部
用AlarmManager来实现
追问
有 具体的实现代码吗?
追答
楼下好多代码。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式