mirror of
https://gitee.com/farsunset/cim.git
synced 2025-07-16 13:06:15 +08:00
修改某些机型 后台长时间运行后 推送服务被kill的问题
This commit is contained in:
parent
e886bd9019
commit
ce15aeba68
@ -13,7 +13,8 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
*/
|
||||
public class CIMPushManager {
|
||||
|
||||
|
||||
static String ACTION_CONNECTION_KEEPALIVE ="ACTION_CONNECTION_KEEPALIVE";
|
||||
|
||||
static String ACTION_CONNECTION ="ACTION_CONNECTION";
|
||||
|
||||
static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS";
|
||||
|
@ -1,10 +1,13 @@
|
||||
|
||||
package com.farsunset.cim.client.android;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
|
||||
import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
@ -18,25 +21,33 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
|
||||
CIMConnectorManager manager;
|
||||
|
||||
AlarmManager localAlarmManager;
|
||||
private IBinder binder=new CIMPushService.LocalBinder();
|
||||
|
||||
PendingIntent localPendingIntent;
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
manager = CIMConnectorManager.getManager(this.getApplicationContext());
|
||||
localPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, KeepAliveReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
localAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
|
||||
localAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 300000L + System.currentTimeMillis(),300000L, localPendingIntent);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent,int flags, int startId) {
|
||||
|
||||
|
||||
String action;
|
||||
if(intent==null)
|
||||
{
|
||||
return super.onStartCommand(intent, flags, startId);
|
||||
}
|
||||
intent = new Intent(CIMPushManager.ACTION_CONNECTION);
|
||||
String host = CIMDataConfig.getString(this, CIMDataConfig.KEY_CIM_SERVIER_HOST);
|
||||
int port =CIMDataConfig.getInt(this, CIMDataConfig.KEY_CIM_SERVIER_PORT);
|
||||
intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, host);
|
||||
intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port);
|
||||
}
|
||||
|
||||
String action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION);
|
||||
action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION);
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION.equals(action))
|
||||
{
|
||||
@ -57,8 +68,11 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
if(CIMPushManager.ACTION_DESTORY.equals(action))
|
||||
{
|
||||
localAlarmManager.cancel(localPendingIntent);
|
||||
localPendingIntent.cancel();
|
||||
manager.destroy();
|
||||
this.stopSelf();
|
||||
android.os.Process.killProcess(android.os.Process.myPid());
|
||||
}
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION_STATUS.equals(action))
|
||||
@ -66,6 +80,22 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
manager.deliverIsConnected();
|
||||
}
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION_KEEPALIVE.equals(action))
|
||||
{
|
||||
|
||||
if(!manager.isConnected())
|
||||
{
|
||||
Log.d(CIMPushService.class.getSimpleName(), "isConnected() = false ");
|
||||
String host = intent.getStringExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST);
|
||||
int port = intent.getIntExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, 28888);
|
||||
manager.connect(host,port);
|
||||
}else
|
||||
{
|
||||
Log.d(CIMPushService.class.getSimpleName(), "isConnected() = true ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Service.START_REDELIVER_INTENT;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
package com.farsunset.cim.client.android;
|
||||
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
/**
|
||||
* @author 3979434
|
||||
*
|
||||
*/
|
||||
public class KeepAliveReceiver extends BroadcastReceiver {
|
||||
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent it) {
|
||||
Log.d(KeepAliveReceiver.class.getSimpleName(), "onReceive()");
|
||||
|
||||
Intent intent = new Intent(context, CIMPushService.class);
|
||||
intent.putExtra(CIMPushManager.SERVICE_ACTION, CIMPushManager.ACTION_CONNECTION_KEEPALIVE);
|
||||
context.startService(intent);
|
||||
}
|
||||
|
||||
}
|
@ -51,8 +51,10 @@
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="portrait" />
|
||||
|
||||
<!--推送服务-->
|
||||
<service android:name="com.farsunset.cim.client.android.CIMPushService" android:process=":cimpush" />
|
||||
|
||||
<!--保持长连接广播-->
|
||||
<receiver android:name="com.farsunset.cim.client.android.KeepAliveReceiver" android:process=":cimpush"/>
|
||||
<!--消息接受广播注册-->
|
||||
<receiver android:name="com.farsunset.ichat.example.receiver.CustomCIMMessageReceiver" android:exported="false">
|
||||
<intent-filter >
|
||||
|
BIN
cim_for_mina/mchat-simple/libs/cim-core-1.6.jar
Normal file
BIN
cim_for_mina/mchat-simple/libs/cim-core-1.6.jar
Normal file
Binary file not shown.
Binary file not shown.
@ -13,7 +13,8 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
*/
|
||||
public class CIMPushManager {
|
||||
|
||||
|
||||
static String ACTION_CONNECTION_KEEPALIVE ="ACTION_CONNECTION_KEEPALIVE";
|
||||
|
||||
static String ACTION_CONNECTION ="ACTION_CONNECTION";
|
||||
|
||||
static String ACTION_CONNECTION_STATUS ="ACTION_CONNECTION_STATUS";
|
||||
|
@ -1,10 +1,13 @@
|
||||
|
||||
package com.farsunset.cim.client.android;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.util.Log;
|
||||
|
||||
import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
@ -18,25 +21,33 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
|
||||
CIMConnectorManager manager;
|
||||
|
||||
AlarmManager localAlarmManager;
|
||||
private IBinder binder=new CIMPushService.LocalBinder();
|
||||
|
||||
PendingIntent localPendingIntent;
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
manager = CIMConnectorManager.getManager(this.getApplicationContext());
|
||||
localPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, KeepAliveReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
localAlarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
|
||||
localAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 300000L + System.currentTimeMillis(),300000L, localPendingIntent);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent,int flags, int startId) {
|
||||
|
||||
|
||||
String action;
|
||||
if(intent==null)
|
||||
{
|
||||
return super.onStartCommand(intent, flags, startId);
|
||||
}
|
||||
intent = new Intent(CIMPushManager.ACTION_CONNECTION);
|
||||
String host = CIMDataConfig.getString(this, CIMDataConfig.KEY_CIM_SERVIER_HOST);
|
||||
int port =CIMDataConfig.getInt(this, CIMDataConfig.KEY_CIM_SERVIER_PORT);
|
||||
intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST, host);
|
||||
intent.putExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, port);
|
||||
}
|
||||
|
||||
String action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION);
|
||||
action = intent.getStringExtra(CIMPushManager.SERVICE_ACTION);
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION.equals(action))
|
||||
{
|
||||
@ -57,8 +68,11 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
|
||||
if(CIMPushManager.ACTION_DESTORY.equals(action))
|
||||
{
|
||||
localAlarmManager.cancel(localPendingIntent);
|
||||
localPendingIntent.cancel();
|
||||
manager.destroy();
|
||||
this.stopSelf();
|
||||
android.os.Process.killProcess(android.os.Process.myPid());
|
||||
}
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION_STATUS.equals(action))
|
||||
@ -66,6 +80,22 @@ import com.farsunset.cim.nio.mutual.SentBody;
|
||||
manager.deliverIsConnected();
|
||||
}
|
||||
|
||||
if(CIMPushManager.ACTION_CONNECTION_KEEPALIVE.equals(action))
|
||||
{
|
||||
|
||||
if(!manager.isConnected())
|
||||
{
|
||||
Log.d(CIMPushService.class.getSimpleName(), "isConnected() = false ");
|
||||
String host = intent.getStringExtra(CIMDataConfig.KEY_CIM_SERVIER_HOST);
|
||||
int port = intent.getIntExtra(CIMDataConfig.KEY_CIM_SERVIER_PORT, 28888);
|
||||
manager.connect(host,port);
|
||||
}else
|
||||
{
|
||||
Log.d(CIMPushService.class.getSimpleName(), "isConnected() = true ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Service.START_REDELIVER_INTENT;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
package com.farsunset.cim.client.android;
|
||||
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
/**
|
||||
* @author 3979434
|
||||
*
|
||||
*/
|
||||
public class KeepAliveReceiver extends BroadcastReceiver {
|
||||
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent it) {
|
||||
Log.d(KeepAliveReceiver.class.getSimpleName(), "onReceive()");
|
||||
|
||||
Intent intent = new Intent(context, CIMPushService.class);
|
||||
intent.putExtra(CIMPushManager.SERVICE_ACTION, CIMPushManager.ACTION_CONNECTION_KEEPALIVE);
|
||||
context.startService(intent);
|
||||
}
|
||||
|
||||
}
|
@ -51,7 +51,10 @@
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="portrait" />
|
||||
|
||||
<service android:name="com.farsunset.cim.client.android.CIMPushService" />
|
||||
<!--推送服务-->
|
||||
<service android:name="com.farsunset.cim.client.android.CIMPushService" android:process=":cimpush" />
|
||||
<!--保持长连接广播-->
|
||||
<receiver android:name="com.farsunset.cim.client.android.KeepAliveReceiver" android:process=":cimpush"/>
|
||||
|
||||
<!--消息接受广播注册-->
|
||||
<receiver android:name="com.farsunset.ichat.example.receiver.CustomCIMMessageReceiver" android:exported="false">
|
||||
|
BIN
cim_for_netty/mchat-simple/libs/cim-core-1.6.jar
Normal file
BIN
cim_for_netty/mchat-simple/libs/cim-core-1.6.jar
Normal file
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user