所以我能够使用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) )。
如果我需要发布更多代码,请告诉我。谢谢!
答案 0 :(得分:0)
因此,当您启动这样的服务时,它不在后台但在主线程上,请参阅https://developer.android.com/guide/components/services.html 这就是你的其他活动没有加载的原因 - 可能你正在做一些你认为会在后台执行的工作(网络访问或磁盘访问或一些CPU密集型工作)。
而不是你现在正在做的事情,我相信IntentService会适合你想要做的更好 - 加上它的onHandleIntent(Intent)已经在后台运行,请参阅https://developer.android.com/reference/android/app/IntentService.html