Servicio de Android para PubNub
He implementado PubNub suscribirse y publicar código. Mi código funciona bien en la actividad. Pero ahora quiero ejecutar ese código en segundo plano con la ayuda de clase de servicio. He creado mi clase extendiendo el IntentService
. Y estoy suscribiendo al canal onCreate
en el método onCreate
. Pero cuando estoy ejecutando el servicio de aplicaciones se detiene inmediatamente sin mostrar el estado de pubnub. Estoy recibiendo el siguiente error de pubnub. He vinculado las bibliotecas necesarias pubnub también.
04-09 23:39:32.621: D/Service Message(10033): error[Error: 100-1] : Timeout Occurred
MainActivity.java
- ¿Cómo puedo convertir la cadena de const valor de clase int?
- ¿Cómo mostrar una barra de progreso cuando WebView carga una URL en Android?
- Java - Timer.cancel () v / s TimerTask.cancel ()
- Android: toma fotos sin interfaz de usuario
- Vector de etiqueta dibujable no válido - appcompat-v7: 24.1.1
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void startService(View v){ startService(new Intent(this, MyService.class)); } public void stopService(View v){ stopService(new Intent(this, MyService.class)); } }
PubnubHandler.java
public class PubnubHandler{ public static final String GLOBAL_CHANNEL = "my_channel_name"; public static final String PUBLISH_KEY = "my_publish_key"; public static final String SUBSCRIBE_KEY = "my_subscribe_key"; private Context context; private Pubnub pubnub; public PubnubHandler(Context context) { this.context = context; pubnub = new Pubnub(PUBLISH_KEY, SUBSCRIBE_KEY); pubnub.setRetryInterval(1000); } public void notifyUser(String message) { final String msg = message; Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(context, msg, 0).show(); } }); } public void subscribe() { Callback callback = new Callback() { @Override public void connectCallback(String channel, Object message) { Log.d("Service Message", "Subscribed"); } @Override public void disconnectCallback(String channel, Object message) { Log.d("Service Message", "Disconnected"); } public void reconnectCallback(String channel, Object message) { Log.d("Service Message", "Reconnected"); } @Override public void successCallback(String channel, final Object message) { Log.d("Service Message", "Message : "+message.toString()); } @Override public void errorCallback(String channel, PubnubError error) { Log.d("Service Message", "error"+error.toString()); } }; try { pubnub.subscribe(GLOBAL_CHANNEL, callback); } catch (PubnubException e) { System.out.println(e.toString()); } } public void unsubscribe() { pubnub.unsubscribe(GLOBAL_CHANNEL); } public void publish(String message) { Callback callback = new Callback() { public void successCallback(String channel, Object response) { } public void errorCallback(String channel, PubnubError error) { notifyUser("Something went wrong. Try again."); } }; pubnub.publish(GLOBAL_CHANNEL, message , callback); } }
MyService.java
public class MyService extends IntentService { public MyService() { super("My Service"); // TODO Auto-generated constructor stub } @Override public void onCreate() { super.onCreate(); Toast.makeText(this, "Service Created", 1).show(); new PubnubHandler(this).subscribe(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Destroyed", 1).show(); } @Override protected void onHandleIntent(Intent arg0) { } }
manifiesto
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.servicedemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" > </service> </application> </manifest>
- Transferencia suave de WiFi en Android
- Android - cambia el estado de un switch de forma programática sin activar OnCheckChanged listener
- Toast Stop - getConnectedNodes
- Robolectric usando Fragments y ActionBarCompat NullPointerException
- OnConfigurationChanged () no se dispara para keyboardHidden
- Picasso carga de imagen de devolución de llamada
- Cómo forzar a detener una aplicación de Android
- ¿Qué es Maven en Android Studio?
Siempre debe hacer el trabajo en IntentService
onHandleIntent()
, no en onCreate()
. La razón porque su IntentService
detiene inmediatamente es que no ha proporcionado ningún código a onHandleIntent()
. IntentService
siempre se cierra cuando onHandleIntent()
termina y no hubo ninguna otra llamada startService()
.
En su caso, sin embargo, las llamadas a PubNub
API son asíncronas y, por lo tanto, ya están en segundo plano. Tal vez usted no necesita IntentService
aquí en absoluto. Si desea crear un objeto modelo para conservar los datos que sobrevivirán a los cambios de configuración de la actividad, considere el uso de Fragmento sin cabecera o Service
simple.
Trate de extender MyService
de Simple Service
lugar de IntentService
. IntentService
llama a stopSelf()
justo después de completar la última tarea. Esto significa que no habría ningún Context
asociado con PubnubHandler
y el sistema puede matar simplemente un Thread
donde subscriben la materia está funcionando.
- Tipo de contenido de Retrofit de Android como aplicación / x-www-form-urlencoded
- El caché de dependencias de Gradle puede estar dañado (esto a veces se produce después de un tiempo de espera de conexión de red).