android 定时器 如何实现
现在需要每隔一分钟,调用一个方法,用户退出也能在后台运行,各位大神,求解决方法!!!!!!...
现在需要每隔一分钟 ,调用一个方法 ,用户退出也能在后台运行,各位大神 ,求解决方法!!!!!!
展开
3个回答
展开全部
可以用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这个是啥??
追答
是我自己定义的一个类,里面定义的是常量
展开全部
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);
}
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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用AlarmManager来实现
追问
有 具体的实现代码吗?
追答
楼下好多代码。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询