尝试在android中创建后台服务时出错(应用程序崩溃) [英] Error trying to create a backgroundservice in android (app crashes)
本文介绍了尝试在android中创建后台服务时出错(应用程序崩溃)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试在后台创建一个带有服务的应用程序,用于监听加速度的变化。当我现在尝试启动服务时,应用程序崩溃:
这是错误消息:
05-30 19:11:03.764 12650- 12650 / com.name.flyrecorder E / AndroidRuntime:FATAL EXCEPTION:main
进程:com.nameflyrecorder,PID:12650
java.lang.RuntimeException:无法启动服务com.name.flyrecorder.CheckStart @ 3d998d with Intent {cmp = com.name.flyrecorder / .CheckStart}:java.lang.IllegalStateException:onCreate()之前的活动不可用的系统服务
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4079 )
在android.app.ActivityThread.access $ 2400(ActivityThread.java:221)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1897)
在android.os .Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:158)
在android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Na方法)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120 )
引起:java.lang.IllegalStateException:onCreate()之前的活动不可用的系统服务在android.app.Activity.getSystemService(Activity.java:5762)
之前的
。 name.flyrecorder.SensorListener。< init>(SensorListener.java:16)
at com.name.flyrecorder.CheckStart $ TestAcc。< init>(CheckStart.java:38)
at com。 name.flyrecorder.CheckStart.onStartCommand(CheckStart.java:29)
在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4062)
在android.app.ActivityThread.access $ 2400(ActivityThread.java :221)&NBSP;
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1897)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:158)
在android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
什么我试过了:
我的主菜:
<? xml version = 1.0 编码 = utf-8 < span class =code-summarycomment>? >
< manifest xmlns:android = http://schemas.android.com/apk/res/android
< span class =code-attribute> package = com.name.flyrecorder >
< application
android:allowBackup = true
android:icon = @ mipmap / ic_launcher
android:label = @ string / app_name
android:roundIcon = < span class =code-keyword> @ mipmap / ic_launcher_round
android:suppo rtsRtl = true
android:theme = @ style / AppTheme >
< 活动 android:name = 。MainActivity >
< intent-filter >
< ; action android:name = android.intent.action.MAIN / >
< category android:name = android.intent.category.LAUNCHER / >
< / inten t-filter >
< / activity >
< service android:name = .CheckStart / >
< /应用程序 >
< / manifest >
这是我的主要活动:
package com.name.flyrecorder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@ Override
protected < span class =code-keyword> void onCreate(Bundle savedInstanceState){
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService( new Intent( this ,CheckStart。类跨度>));
}
public void startBackgroundListener(查看视图){
startService( new Intent( this ,CheckStart。类跨度>));
}
}
我的服务:
package com.name.flyrecorder;
import android.app.Service;
import android.content.Intent;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class CheckStart extends 服务{
public CheckStart(){
}
@ Nullable
@ Override
public IBinder onBind(意图意图){
return null;
}
@覆盖
public int onStartCommand(Intent intent, int 标志, int startId){
Toast.makeText( this , 服务已开始,Toast.LENGTH_SHORT)。show();
new TestAcc()。execute();
return Service.START_NOT_STICKY;
}
@覆盖
public void onDestroy(){
Toast.makeText( this , 服务已停止,Toast.LENGTH_SHORT).show();
}
public class TestAcc extends AsyncTask< Void,Void,Void> {
SensorListener sensorListener = new SensorListener();
double [] sensor_values = new double [ 2 ];
@ Override
protected Void doInBackground(Void ... void){
new Timer()。schedule( new TimerTask(){
@覆盖
public void run() {
sensor_values = sensorListener.getValues();
Log.i( X, String .valueOf(sensor_values [ 0 ]));
Log.i( Y, String .valueOf( sensor_values [ 1 ]));
Log.i( < span class =code-string> Z, String .valueOf(sensor_values [ 2 ]));
}
}, 2000
);
return null;
}
}
}
和我的SensorListener:
package com.name.flyrecorder;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v4.app.FragmentActivity;
public class SensorListener extends FragmentActivity implements SensorEventListener {
传感器加速度计;
SensorManager sensorManager;
double ax,ay,az = 0 ;
public SensorListener(){
sensorManager =(SensorManager)getSystemService(SENSOR_SERVICE);
sensorManager.registerListener( this ,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
}
@覆盖
public void onSensorChanged(SensorEvent事件){
if (event.sensor.getType()== Sensor.TYPE_ACCELEROMETER){
ax = event.values [ 0 ];
ay = event.values [ 1 ];
az = event.values [ 2 ];
}
}
@覆盖
public void onAccuracyChanged(传感器传感器, int 准确度){
}
public double [] getValues(){
double [] values = {ax,ay,az};
返回值;
}
}
解决方案
2400(ActivityThread.java:221)
在android.app .ActivityThread
H.handleMessage(ActivityThread.java:1897)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os .Looper.loop(Looper.java:158)
在android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:1120)
引起:java.lang.IllegalStateException:onCreate()之前的活动不可用的系统服务
at android.app.Activity.getSystemService(Activity.java:5762)
at com.name.flyrecorder.SensorListener。< init>(SensorListener.java:16)
at com.name.flyrecorde r.CheckStart
I tried to create an App with an Service in background which listen for changes of the acceleration. When i now try to start the Service the app crashes:
This is the Error Message:
05-30 19:11:03.764 12650-12650/com.name.flyrecorder E/AndroidRuntime: FATAL EXCEPTION: main Process: com.nameflyrecorder, PID: 12650 java.lang.RuntimeException: Unable to start service com.name.flyrecorder.CheckStart@3d998d with Intent { cmp=com.name.flyrecorder/.CheckStart }: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4079) at android.app.ActivityThread.access$2400(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.Activity.getSystemService(Activity.java:5762) at com.name.flyrecorder.SensorListener.<init>(SensorListener.java:16) at com.name.flyrecorder.CheckStart$TestAcc.<init>(CheckStart.java:38) at com.name.flyrecorder.CheckStart.onStartCommand(CheckStart.java:29) at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4062) at android.app.ActivityThread.access$2400(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
What I have tried:
My Mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.name.flyrecorder">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".CheckStart" />
</application>
</manifest>
This is my Main Activity:
package com.name.flyrecorder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService(new Intent(this, CheckStart.class));
}
public void startBackgroundListener(View view){
startService(new Intent(this, CheckStart.class));
}
}
My Service:
package com.name.flyrecorder;
import android.app.Service;
import android.content.Intent;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class CheckStart extends Service {
public CheckStart(){
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
new TestAcc().execute();
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy(){
Toast.makeText(this,"Service Stopped", Toast.LENGTH_SHORT).show();
}
public class TestAcc extends AsyncTask<Void, Void, Void>{
SensorListener sensorListener = new SensorListener();
double[] sensor_values = new double[2];
@Override
protected Void doInBackground(Void... voids) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
sensor_values = sensorListener.getValues();
Log.i("X",String.valueOf(sensor_values[0]));
Log.i("Y",String.valueOf(sensor_values[1]));
Log.i("Z",String.valueOf(sensor_values[2]));
}
},2000
);
return null;
}
}
}
And my SensorListener:
package com.name.flyrecorder;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v4.app.FragmentActivity;
public class SensorListener extends FragmentActivity implements SensorEventListener {
Sensor accelerometer;
SensorManager sensorManager;
double ax,ay,az = 0;
public SensorListener(){
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
ax = event.values[0];
ay = event.values[1];
az = event.values[2];
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public double[] getValues(){
double[] values = {ax,ay,az};
return values;
}
}
解决方案
2400(ActivityThread.java:221) at android.app.ActivityThread
H.handleMessage(ActivityThread.java:1897) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit
MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() at android.app.Activity.getSystemService(Activity.java:5762) at com.name.flyrecorder.SensorListener.<init>(SensorListener.java:16) at com.name.flyrecorder.CheckStart
这篇关于尝试在android中创建后台服务时出错(应用程序崩溃)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文