读书人

android 写了个service 在虚拟机测试可

发布时间: 2013-06-25 23:45:42 作者: rapoo

android 写了个service 在虚拟机测试可以启动 安装到手机后就启动不了 启动了也没有执行方法
直接上代码


public class AutoRunService extends Service {
@Override
public void onCreate() {
super.onCreate();
System.out.println("*****onCreate*****");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("servicestar", "*****onStart*****");
try {
new WSAsyncTask().execute();
} catch (Exception ex) {
Log.i("e", ex.toString());
}
return super.onStartCommand(intent, flags, startId);
}

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

@Override
public void onDestroy() {
// TODO Auto-generated method stub

// objHandler.removeCallbacks(mTasks);
super.onDestroy();
}

class WSAsyncTask extends AsyncTask {
String result = "";

@Override
protected Object doInBackground(Object... params) {
//远程服务器获取数据
return null;
}

}


有个监听开机启动service的类

public class BootBroadcast extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent mintent) {

if (Intent.ACTION_BOOT_COMPLETED.equals(mintent.getAction())) {
// 启动完成
Intent intent = new Intent(context, Alarmreceiver.class);
intent.setAction("alarm.action");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,intent, 0);
long firstime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);

// 10秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime,
10 * 1000, sender);
}

}
}


Alarmreceiver类

public class Alarmreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals("alarm.action")) {


Intent i = new Intent();
i.setClass(context, AutoRunService.class);
// 启动service
// 多次调用startService并不会启动多个service 而是会多次调用onStart
context.startService(i);
}
}
}



Manifest.xml

<receiver android:name=".BootBroadcast"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
<receiver
android:name=".Alarmreceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="alarm.action" />
</intent-filter>
</receiver>
<service
android:enabled="true"
android:name=".AutoRunService" >
</service>


这样写好后 在虚拟机测试是有效果的 但安装到手机后就不行了 我直接启动service
startService(new Intent(this, AutoRunService.class));
但也是没有反应的 WSAsyncTask并没有执行到 刚接触android不久 求助 Android service? 手机 Java 虚拟机
[解决办法]
你开机广播能收到吗?
不知道哪个版本以后这个写法好像不管用
[解决办法]
第一次启动执行oncreate
以后只要没被stop在启动的话才是startcommand
[解决办法]
运行中的service执行startcommand
------解决方案--------------------


<service
android:name=".service.MyService"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="com.service.MyService" />
</intent-filter>
</service>

这里改一下

读书人网 >Android

热点推荐