簡體   English   中英

我如何永遠在Android應用程序中保留線程?

[英]How can i keep a thread in android app forever?

我正在構建一個企業應用程序,該應用程序需要獲取有關員工的手機的信息以進行公司管理。 該線程需要每五分鍾運行一次。 我正在使用一個由Android啟動時由廣播(BOOT_COMPLETED)啟動的Activity,它會啟動一個無限線程將該信息發送到服務器。 我當前的問題是,用戶打開了許多其他應用程序后,我的應用程序被android殺死了。 使線程在后台運行以將此信息發送到服務器的更好的方法是什么?

主要應用類別

public static void startService(Context mContext){

    try{
        //Schedule Service.
        scheduleService(mContext);

        //Call onUpdate.
        onUpdate();

    }catch (Exception o){
        Utilities.log(o.toString());
    }

}



public static void scheduleService(Context mContext){

    try{

        final int NOTIFICATION_INTERVAL = 5 * 60 * 1000;
        Intent mIntent = new Intent(mContext, ServiceReceiver.class);
        AlarmManager mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);

        PendingIntent mPendingIntent = PendingIntent.getBroadcast(mContext, 1, mIntent, 0);

        mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), NOTIFICATION_INTERVAL, mPendingIntent);

    }catch (Exception o){
        Utilities.log(o.toString());
    }
}

服務接收器

public class ServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context mContext, Intent intent) {

    Utilities.log("Service Received");

    //Start Service.
    MyApplication.startService(mContext);

 }
}

Android清單

<receiver
 android:name=".BootUpReceiver"
 android:enabled="true">
 <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    <action android:name="android.intent.action.REBOOT"/>

    <category android:name="android.intent.category.DEFAULT"/>
 </intent-filter>
</receiver>


<receiver android:name=".ServiceReceiver"/>    

開機接收器

public class BootUpReceiver extends BroadcastReceiver
{ 

     public void onReceive(Context mContext, Intent mIntent){

         Utilities.log("BootUp Received.");

        //Start Service.
        MyApplication.startService(mContext);
     }
}

創建用於重復警報的靜態廣播接收器並從廣播啟動Intent服務不要使用無限線程

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        NotificationStatus.setupNotification(context); // if you restart your phone
    }

}

class NotificationStatus{
    //Call only one time from app from any activity
    public static void setupNotification(Context context) {
        final int NOTIFICATION_INTERVAL = 5 * 60 * 1000;
        Intent myIntent1 = new Intent(context, NotificationReceiver.class);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 1, myIntent1, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), NOTIFICATION_INTERVAL, pendingIntent1);

    }
}


public class NotificationReceiver extends BroadcastReceiver {
    private static final int mNotificationId = 0;
    @Override
    public void onReceive(Context context, Intent intent) {
        //start your services here for sending data
Intent intent1 = new Intent(context, SyncService.class);
    context.startService(intent1);
    }
}



public class SyncService extends IntentService {

public SyncService(String name) {
    super(name);
}

@Override
protected void onHandleIntent(Intent intent) {
    //Write code here for sending data to server
}

}

AndroidManifest

<receiver android:name="NotificationReceiver" />
<receiver android:name="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>

在清單中定義服務

<service android:name=".SyncService"/>

您需要使您的應用程序成為Android服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM