ورود

View Full Version : اجرای یک کد به صورت دوره ای در پس زمینه



m.kahtooei
سه شنبه 17 فروردین 1395, 06:27 صبح
باسلام
من یه برنامه اندروید نوشتم که در برنامه نیاز هست به صورت دوره ای مثلا هر 5دقیقه یکبار دیتابیس موجود در سرور چک بشه و درصورت تغییر،دیتابیس لوکال با اون sync بشه و نتیجه رو به صورت نوتیفیکیشن نشون بده.
جستجوهایی که کردم به این نتیجه رسیدم که باید از سرویس استفاده کنم تا زمان بسته بودن برنامه هم کدها اجرا بشه. حالا چندتا سوال داشتم :
1- چطور باید سرویسم رو زمان ریستارت کردن گوشی به صورت خودکار اجرا کنم که نیاز نباشه حتما یک بار وارد برنامه بشم
2- چطور برنامه اصلیم رو زمان ریستارت کردن گوشی اجرا کنم؟چیزی شبیه startup در ویندوز
3- چطور میتونم دستورات رو به صورت دوره ای مثلا 5دقیقه یکبار اجرا کنم؟مثلا هر 5 دقیقه یکبار اتصال اینترنت رو چک کنه و...

اگر دوستان محبت کنن منبع و یا کتاب مناسبی در این زمینه هم معرفی کنن ممنون میشم

پیشاپیش از راهنمایی دوستان تشکر میکنم

arviny
سه شنبه 17 فروردین 1395, 10:30 صبح
سلام ،
1 - زمانی که گوشی دوباره روشن میشه باید از مجوز BootUpReceiver استفاده کنی کار این مجوزه اجازه دسترسی به برنامه برای زمانیه که گوشی تازه روشن شده و یا پس از ریستارت داره میاد بالا و برنامه متوجه این ایتم میشه حالا برای اینکه در زمان بوت برنامه شما یه اکتیویتی یا سرویس رو اجرا کنه شما باید از یک BroadcastReceiver استفاده کنی می تونی از مثال زیر برای اجرا سرویست استفاده کنی :


public class BootUpReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
// TODO Auto-generated method stub
try{
Intent in = new Intent(context,AppService.class);
context.startService(in);
} catch (Exception e) {
e.printStackTrace();
}
}

}
این کلاس برای اجرای یک سرویس پس از روشن شدن دستگاهه .

2 - خوب برای اینکه برنامه شما در زمان روشن شدن گوشی اجرا بشه توی بجای کد بالا باید از این کد استفاده کنی :

public class BootUpReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
// TODO Auto-generated method stub
try{
Intent in = new Intent(context,MainActivity.class);
context.startActivity(in);
} catch (Exception e) {
e.printStackTrace();
}
}

}
اینجا ما به کلاس برای اجرای یک اکتویتی داریم پس از روشن شدن دستگاه داریم

3- برای اینکه بتونی به صورت دوره ای یک تابع یا دستور خاص رو اجرا کنی می تونی از Handler استفاده کنی :

Handler handler = new handler();
handler.postDelayed(
new Runnable(){
public void run(){
// Dastori ke mikhay tekrar beshe
}
}, 1000);
این دستور هر 1.000 میلی ثانیه یعنی هر 1 ثانیه یک بار اجرا میشه برای یک ساعت باید از این عدد استفاده کنی : 1*60*60*1000 = 3.600.000 میلی ثانیه میشه باید جای 1000 بذاریم تا هر یک ساعت یک بار دستور ما اجرا بشه،

امیدوارم که تا جای ممکن تونسته باشم بهتون کمک کنم

m.kahtooei
سه شنبه 17 فروردین 1395, 21:53 عصر
بسیار عالی بود:تشویق:
خیییییییییییییییلی ممنون از راهنماییتون