如何在Android应用的后台维护服务

时间:2016-06-28 23:35:09

标签: android android-service

所以我能够使用FLAG_ACTIVITY_NEW_TASK获得首先运行的服务。希望这是这样做的正确方法。但是,由于我在程序启动之前使用intent在启动屏幕上启动service(),它不允许启动屏幕图像工作,只允许服务,然后它进入主屏幕。

我怎样才能让两者兼得?我正确使用Service吗?

非常感谢任何帮助。这是我到目前为止所做的:

我的服务类:

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class SpeedManagerService extends Service {

    private static final String TAG = "SpeedCheckerService";

        @Override
        public void onCreate() {
            Log.i( TAG, "Service onCreate" );
        }

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i( TAG, "Service onStartCommand" );
            Intent intnt = new Intent(this, SpeedChecker.class);
            intnt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intnt);
            return Service.START_STICKY;
        }

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }

这是我的启动画面:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SplashActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate( savedInstanceState );
        setContentView( R.layout.splash );

        /**
         * Timer set to spend 3 seconds on splash screen then off to main menu
         */
        Thread timerThread = new Thread() {
            public void run() {
                try {
                    startService();
                    sleep( 3000 );
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    Intent intent = new Intent( SplashActivity.this, MenuActivity.class );
                    startActivity( intent );
                }
            }
        };
        timerThread.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

    public void startService() {
        Intent intent = new Intent( this, SpeedManagerService.class );
        startService( intent );
    }
}

我的全部想法是让Service在后​​台运行,每当它达到它需要的时候,发出通知,一旦点击通知,它就转到其他类之一(otheractivity.class) )。 如果我需要发布更多代码,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

因此,当您启动这样的服务时,它不在后台但在主线程上,请参阅https://developer.android.com/guide/components/services.html 这就是你的其他活动没有加载的原因 - 可能你正在做一些你认为会在后台执行的工作(网络访问或磁盘访问或一些CPU密集型工作)。

而不是你现在正在做的事情,我相信IntentService会适合你想要做的更好 - 加上它的onHandleIntent(Intent)已经在后台运行,请参阅https://developer.android.com/reference/android/app/IntentService.html