在<div ng-controller="validationCtrl">
<form name="xyzForm" novalidate>
<input
type="text"
name="name"
ng-model="xname"
ng-class="{'has-error': xyzForm.name.$invalid && !xyzForm.name.$pristine}"
/>
<input
type="number"
name="age"
ng-model="xage"
ng-class="{'has-error': xyzForm.age.$invalid && !xyzForm.age.$pristine && xyzForm.age.$dirty}"
/>
<div>
<button ng-click="submit()" ng-disabled="xyzForm.$invalid || xyzForm.$pristine">Submit</button>
<span>invalid : {{xyzForm.$invalid}}</span>
<span>pristine : {{xyzForm.$pristine}}</span>
</div>
</form>
</div>
我启动服务
Activity
在服务中,我得到参数
Intent serv=new Intent(this, MyService.class);
serv.putExtra("mac", "mac");
startService(serv);
然后我杀了应用程序,应用程序将崩溃,服务也将崩溃。
如果我删除此行,那么这将没有问题,我杀死应用程序后服务也活着。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String mac=intent.getExtras().getString("mac");
return super.onStartCommand(intent, flags, startId);
}
为什么应用程序会崩溃?
答案 0 :(得分:1)
super.onStartCommand(intent, flags, startId)
会返回START_STICKY
标记,根据文档,这意味着:
&#34;如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),则将其保持在已启动状态但不要进行操作。保留这个交付的意图。&#34;
由于Intent
未被重新传递,因此在致电NPE
时您可能会intent.getExtras()
。
要重新传递Intent
,请从onStartCommand()
返回START_REDELIVER_INTENT
标记:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
...
return START_REDELIVER_INTENT;
}
答案 1 :(得分:0)
您正在为错误的意图bleService.putExtra("mac", "mac");
相反,你应该写serv.putExtra("mac", "mac");
此外,您应该始终检查是否有额外内容
if(getIntent().hasExtra("mac"){
//do some stuff
}