انجمن سایت کلیدستان



بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)زمان کنونی: ۱۳۹۶/۰۷/۰۳، ۱۰:۳۱ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: pirozy
آخرین ارسال: pirozy
پاسخ 4
بازدید 146

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)

بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)

#1
سلام
من یک سرویس ایجاد کردم که تو پس زمینه اجرا میشه و با یک نوتیفیکیشن شروعش نشون داده میشه ولی مشکلی که هست اینه که بعد از حدود 15 ال 20 دقیقه سرویس متوقف میشه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
علت چی هست؟ من میخوام سرویسم تا من استپ نکردم همیشه در حال اجرا باشه و یه سری کد تو پس زمینه دائما در حال اجرا باشن یعنی ذات برنامه من چنین هست که 24 ساعته یک سری کد رو تست کنه و دستورات مربوط به اون رو انجام بده
لطفا کمک کنید کارم خیلی گیره با تشکر

کد پی‌اچ‌پی:
public class MainActivity extends AppCompatActivity
{

 
   @Override
    protected void onCreate
(Bundle savedInstanceState)
 
   {
 
       super.onCreate(savedInstanceState);
 
       setContentView(R.layout.activity_main);
 
   }

 
   @Override
    public void onBackPressed
()
 
   {
 
       Toast.makeText(this,"Back Pressed",Toast.LENGTH_SHORT).show();
 
       Intent intent=new Intent(this,MyService.class);
 
       startService(intent);
 
       super.onBackPressed();
 
   }
}

public class 
MyService extends Service
{
 
   private DatagramSocket udp;
 
   private DatagramPacket p;
 
   private InetAddress ip;
 
   private Thread Service_Theard=null;

 
   private PowerManager powerManager ;
 
   private PowerManager.WakeLock wakeLock ;

 
   private int i=0;
 
   private byte[] buffer=new byte[1024];
 
   private String str="";

 
   @Override
    public void onCreate
()
 
   {
 
       powerManager = (PowerManagergetSystemService(POWER_SERVICE);
 
       wakeLock powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"Tag");

 
       Intent notificationIntent = new Intent(thisMyService.class);
 
       PendingIntent pendingIntent PendingIntent.getActivity(this0notificationIntent0);

 
       Notification notification = new Notification.Builder(this)
 
               .setContentTitle("Service")
 
               .setContentText("UDP Client Running...")
 
               .setSmallIcon(R.mipmap.ic_launcher)
 
               .setContentIntent(pendingIntent)
 
               .build();

 
       startForeground(1notification);
 
   }

 
   @Override
    public int onStartCommand
(Intent intentint flagsint startId)
 
   {
 
       Toast.makeText(this,"Service Start",Toast.LENGTH_SHORT).show();
 
       wakeLock.acquire();
 
       Service_Theard=null;
 
       Service_Theard=new Thread(Service_Run);
 
       Service_Theard.start();
 
       return Service.START_STICKY;
 
   }

 
   @Override
    public IBinder onBind
(Intent intent)
 
   {
 
       return null;
 
   }

 
   @Override
    public void onDestroy
()
 
   {
 
       if(wakeLock.isHeld())
 
           wakeLock.release();
 
   }

 
   private Runnable Service_Run=new Runnable()
 
   {
 
       @Override
        public void run
()
 
       {
 
           try
            
{
 
               udp=new DatagramSocket();
 
               ip=InetAddress.getByName("192.168.1.34");
 
           }catch (SocketException e)
 
           {
 
               e.printStackTrace();
 
           }catch (UnknownHostException e)
 
           {
 
               e.printStackTrace();
 
           }

 
           while (true)
 
           {
 
               str String.valueOf(i);
 
               buffer str.getBytes();
 
               p = new DatagramPacket(buffer0str.length(), ip5555);
 
               try {
 
                   udp.send(p);
 
               } catch (IOException e)
 
               {
 
                   e.printStackTrace();
 
               }
 
               i++;
 
           }
 
       }
 
   };


البته کار سرویس این هست که در پس زمینه هر یک ثانیه یک بار مقدار متغییر i رو یک واحد اضافه می کنه و از طریق وای فای با پروتکل udp اون رو به سرور که روی کامپیوتر هست ارسال می کنه که تو این 15 الی 20 دقیقه که سرویس در حال اجراست بخوبی کار می کنه
پاسخ

بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)

#2
دوستان فقط تو گوشی من هست این ایراد
گوشیم سامسونگ گلکسی c7 با اندروید 6.0.1 هست!!!!!
پاسخ

بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)

#3
سلام.
بنده نگاهی سریع به کدهای شما انداختم، اما متوجه نشدم که 1 ثانیه توقف را در کجا اجرا کرده اید.
حلقه while شما به صورت زیر می باشد :

کد پی‌اچ‌پی:
while (true)
{
 
   str String.valueOf(i);
 
   buffer str.getBytes();
 
   p = new DatagramPacket(buffer0str.length(), ip5555);
 
   try {
 
       udp.send(p);
 
   } catch (IOException e)
 
   {
 
       e.printStackTrace();
 
   }
 
   i++;


بنابراین بدون وقفه اجرا می شود، مگر اینکه وقفه 1 ثانیه ای را در روش send از کلاس DatagramPacket قرار داده باشید.
به هر حال، اگر واقعا وقفه 1 ثانیه ای قرار نداده باشید، ممکن است اجرای بیش از حد کدها (سنگین بودن بار اجرایی)، باعث شده باشد که گوشی برای درست عمل کردن سایر اپلیکیشن ها، سرویس (Service) مربوط به برنامه اندروید شما را متوقف کند.
بنابراین زمان اجرای کدها را چک کنید و در صورت لزوم، توقف 1 ثانیه ای را بر اساس کلیدهای موجود در دسته کلید زیر (برای توقف موقتی اجرای کدهای برنامه)، در کدها قرار دهید :

دسته کلید شماره 319

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط pirozy

بسته شدن سرویس بعد از 15 تا 20 دقیقه؟ (برنامه نویسی اندروید)

#4
(۱۳۹۶/۰۴/۳۱, ۰۷:۱۲ ب.ظ)admin نوشته: سلام.
بنده نگاهی سریع به کدهای شما انداختم، اما متوجه نشدم که 1 ثانیه توقف را در کجا اجرا کرده اید.
حلقه while شما به صورت زیر می باشد :

کد پی‌اچ‌پی:
while (true)
{
 
   str String.valueOf(i);
 
   buffer str.getBytes();
 
   p = new DatagramPacket(buffer0str.length(), ip5555);
 
   try {
 
       udp.send(p);
 
   } catch (IOException e)
 
   {
 
       e.printStackTrace();
 
   }
 
   i++;


بنابراین بدون وقفه اجرا می شود، مگر اینکه وقفه 1 ثانیه ای را در روش send از کلاس DatagramPacket قرار داده باشید.
به هر حال، اگر واقعا وقفه 1 ثانیه ای قرار نداده باشید، ممکن است اجرای بیش از حد کدها (سنگین بودن بار اجرایی)، باعث شده باشد که گوشی برای درست عمل کردن سایر اپلیکیشن ها، سرویس (Service) مربوط به برنامه اندروید شما را متوقف کند.
بنابراین زمان اجرای کدها را چک کنید و در صورت لزوم، توقف 1 ثانیه ای را بر اساس کلیدهای موجود در دسته کلید زیر (برای توقف موقتی اجرای کدهای برنامه)، در کدها قرار دهید :

دسته کلید شماره 319

Flower

با سلام و تشکر از پاسختون
اره راست می فرمایید یادم رفته بود بذارم ولی اضافه کردم به روش زیر بعد از اضافه کردن ولی روی گوشی های اندروید 4 و 4.4 و تست کردم به خوبی اجرا شد بدونه کوچکترین مشکل و حدودا 6 ساعت اجرا شد و متوقف نشد که خودم force stop کردمش
ولی رو گوشی من بیشتر از 25 دقیقه کار نمی کنه بعد از 25 دفیقه پایان می یابه بدونه اینکه خطایی بده که سرویس متوقف شد
اصلا موندم خودم که چی کارش کنم خیلی گیرم سرویس باید همیشه در حاله اجرا باشه


کد پی‌اچ‌پی:
while (true)
 
           {
 
               str String.valueOf(i);
 
               buffer str.getBytes();
 
               p = new DatagramPacket(buffer0str.length(), ip5555);
 
               try {
 
                   udp.send(p);
 
               } catch (IOException e)
 
               {
 
                   e.printStackTrace();
 
               }
 
               try {
 
                   Thread.sleep(1000);
 
               }catch (InterruptedException e)
 
               {
 
                   e.printStackTrace();
 
               }
 
               i++;
 
           
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)