Android服务无法正常工作?

时间:2014-05-22 11:30:25

标签: java android android-service

我正在尝试创建服务。 我创建了一个服务和我的活动。但是当我开始活动时,服务变为2。 因为第一次服务,第二次服务第二次服务。看到我的代码并帮助我,我错过了什么?

主要活动。

public class MainActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
          startService(new Intent(getBaseContext(), MyService.class));
   }  
}

我不是在这里停止服务,因为我想在每10秒后在服务器上发送信息,当用户运行我的应用程序时,应用程序开始在服务器上发送数据。 如果我的用户完成()活动,服务仍然有效,但如果用户点击退出/退出按钮,服务将停止工作。

Myservice.java

 public class MyService extends Service {
   @Override
   public IBinder onBind(Intent arg0) {
      return null;
   }

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      // Let it continue running until it is stopped.

     final Handler h1 = new Handler();
        new Thread(new Runnable() {

            public void run() {

                while (true) {

                    try {

                        Thread.sleep(10000);
                        h1.post(new Runnable() {

                            public void run() {
                            System.out.println("lay g jnab");

                            }
                            });
                        } catch (Exception e) {
        }

                }
            } }).start();

      return START_STICKY;
   }
   @Override
   public void onDestroy() {
      super.onDestroy();
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
   }
}
请帮助我?

2 个答案:

答案 0 :(得分:0)

尝试实施前台服务。 foreground service

前台服务显示通知,并且永远不会被活动关闭停止。并且可以在需要时停止。

在您的服务中实施此代码段

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
        System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
        getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION_ID, notification);

答案 1 :(得分:-1)

尝试使用BroadcastReceiver代替服务

Br.Java

public class Br extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {

        // your functionality
    }
}

MainActivity.Java

Intent multiAlarmIntent = new Intent(MainActivity.this, Br.class);
PendingIntent multiAlarmPendingIntent = PendingIntent.getBroadcast(MainActivity.this, MULTI_ALARM_RC, multiAlarmIntent, NO_FLAGS);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000,1000*60*60*10, multiAlarmPendingIntent);

的Manifest.xml:

<activity
     android:name="com.example.MainActivity"
     android:label="@string/app_name" 
     android:screenOrientation="portrait">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
</activity>
<receiver
  android:name="com.example.Br"
  android:process=":remote"/>