Service 的 ANR 错误

1.当在Activity 的onCreate方法中启动一个服务,服务里面是一个死循环。=》主界面无法绘出,点击手机键盘的返回按钮会报ANR错误。

2.当在Activity 的onCreate方法中启动一个线程,线程里面启动一个服务,服务里面是一个死循环。=》主界面可以绘出 但会报ANR错误。

3.当给按钮设置了一个点击事件,单击方法中启动了一个线程,线程内启动了一个服务,服务里面是一个死循环。=》5秒后会报ANR错误

4.当给按钮设置了一个点击事件,单击方法中启动了一个服务,      服务里面是一个死循环。=》点击手机键盘的返回按钮会报ANR错误

 

不报错的是

给按钮设置了一个点击事件,单击方法中启动了一个线程,线程内是无限循环。不会报错。即使activity被销毁了,线程依然会执行。如果想让线程销毁,则可以在

onDestroy()方法中加入System.exit();

 

误区:很多人以为service 能执行耗时的操作,这是一个误区,service 中不能执行耗时的操作,它也属于UI主线程,要执行耗时操作可以使用IntentService

http://blog.csdn.net/zhf198909/article/details/6906786

IntentService和Service的重要区别是,IntentService中 onHandleIntent(Intent intent)的代码执行完毕后,会自动停止服务,执行onDestroy()方法

http://android.blog.51cto.com/268543/528166

 

如果在Service中启动了一个无限循环线程,如果想停止此线程的执行。需要先停止服务,然后再执行System.exit()或者android.os.Process.killProcess(android.os.Process.myPid())终止线程;

public class MainActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
        Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(this);
       
    }
    @Override
	public void onClick(View v)
	{
		// TODO Auto-generated method stub
    	
//        new Thread(new MyThread()).start();      
		Intent intent = new Intent(MainActivity.this,SqkService.class);
		MainActivity.this.startService(intent);

		
	}

	@Override
	public void onDestroy()
	{
		super.onDestroy();
		Intent  intent = new Intent(MainActivity.this,SqkService.class);
//		销毁service中的无限循环线程的方式一:先停止线程,再杀掉进程,2句代码缺一不可

		this.stopService(intent);
		System.exit(0);
//		销毁service中的无限循环线程的方式二:先停止线程,再杀掉进程,2句代码缺一不可
		
//		this.stopService(intent);
//		android.os.Process.killProcess(android.os.Process.myPid());
	}
}


 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值