سلام
من یک سرویس ایجاد کردم که تو پس زمینه اجرا میشه و با یک نوتیفیکیشن شروعش نشون داده میشه ولی مشکلی که هست اینه که بعد از حدود 15 ال 20 دقیقه سرویس متوقف میشه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
علت چی هست؟ من میخوام سرویسم تا من استپ نکردم همیشه در حال اجرا باشه و یه سری کد تو پس زمینه دائما در حال اجرا باشن یعنی ذات برنامه من چنین هست که 24 ساعته یک سری کد رو تست کنه و دستورات مربوط به اون رو انجام بده
لطفا کمک کنید کارم خیلی گیره با تشکر
البته کار سرویس این هست که در پس زمینه هر یک ثانیه یک بار مقدار متغییر i رو یک واحد اضافه می کنه و از طریق وای فای با پروتکل udp اون رو به سرور که روی کامپیوتر هست ارسال می کنه که تو این 15 الی 20 دقیقه که سرویس در حال اجراست بخوبی کار می کنه
من یک سرویس ایجاد کردم که تو پس زمینه اجرا میشه و با یک نوتیفیکیشن شروعش نشون داده میشه ولی مشکلی که هست اینه که بعد از حدود 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 = (PowerManager) getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"Tag");
Intent notificationIntent = new Intent(this, MyService.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new Notification.Builder(this)
.setContentTitle("Service")
.setContentText("UDP Client Running...")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);
}
@Override
public int onStartCommand(Intent intent, int flags, int 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(buffer, 0, str.length(), ip, 5555);
try {
udp.send(p);
} catch (IOException e)
{
e.printStackTrace();
}
i++;
}
}
};
}
البته کار سرویس این هست که در پس زمینه هر یک ثانیه یک بار مقدار متغییر i رو یک واحد اضافه می کنه و از طریق وای فای با پروتکل udp اون رو به سرور که روی کامپیوتر هست ارسال می کنه که تو این 15 الی 20 دقیقه که سرویس در حال اجراست بخوبی کار می کنه