Android activity与service中的子线程 (入门级)

1.首先 android 一个程序中 的activity 都是一个线程,service和activity也是一个线程

2.在activity 中启动一个子线程,当前activity finish destroy掉 子线也会运行的。

3.在service里的线程 与activity很类似  service即使停止了 线程也在运行(要先停止服务 再把最近使用的进程杀掉 线程会停止 ,如果直接杀掉进程 android会再次自动启动这个service的 此时即使再停止service服务 线程也会一直运行了除非关机)

activity 中启动一个子线程

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lout);
		System.out.println("当前线程 执行了====SecondActivity====="+Thread.currentThread().getId());
		new Thread(new Runnable() {
			@Override
			public void run() {
			   while(true){
					 System.out.println("当前线程 执行了==22222=="+Thread.currentThread().getId());
					 try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				 }
			}
		}).start();
	}
    @Override
	protected void onDestroy() {
		System.out.println("当前线程 执行了======结束====="+Thread.currentThread().getId());
		super.onDestroy();
	}
}

activity finish 子线程依旧可以运行,即使程序退出了子线程也在运行 (除非在任务管理器里 把最近使用的进程杀掉)

service 中启动一个子线程

public class TestService extends Service{
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		System.out.println("当前线程 执行了====TestService0000====="+Thread.currentThread().getId()); 

		new Thread(new Runnable() {
			@Override
			public void run() {
			 while(true){
				 System.out.println("当前线程 执行了==22222=="+Thread.currentThread().getId());
				 try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}   }  }
		}).start();
		return super.onStartCommand(intent, flags, startId);
	}
	@Override
	public void onDestroy() {
		System.out.println("当前线程 执行了=====TestService=结束====="+Thread.currentThread().getId());
		super.onDestroy();
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
}

以上3条是在 android 4.4.2测试的情况,其他版本没有试过。如有不对的地方请批评指正!

请注意子线程的生命周期 不要activity结束了 子线程才处理完 返回结果给UI就会有问题,也可以为耗时或者需要长时间运行的情况提供一点思路

时间: 2024-12-10 17:41:23

Android activity与service中的子线程 (入门级)的相关文章

android activity和service的交互介绍

android开发中,作为4大组件的service在开发中经常会使用到.很多时候,我们的activity和service之间需要进行相应的交互,activity需要调用service里面的方法实现某些功能,service需要调用activity的方法,实现界面更新等的交互. 实现2者之间相互交互的主要方式是:service中有个类部类继承Binder,然后提供一个公有方法,返回当前service的实例. activity通过bindService来开启一个service,service通过onB

android Activity绑定Service

activity可以绑定Service,并且可以调用Service中定义的方法 Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道: public class MainServer extends Service { private final String TAG = "Service------->"; private final IBinder binder = new MyBinder(); //绑定器 public clas

【android】在Service中新建TextView

在Activity中new TextView的时候,发现传入的参数是Context,不是必须为Activity,就想:在Service中新建一个View的话能否正常使用? Service中:` public class MyJobService extends JobService { public static TextView myView; @Override public boolean onStartJob(JobParameters params) { myView = new Te

Android中,子线程使用主线程中的组件出现问题的解决方法

Android中,主线程中的组件,不能被子线程调用,否则就会出现异常. 这里所使用的方法就是利用Handler类中的Callback(),接受线程中的Message类发来的消息,然后把所要在线程中执行的功能交由Handler类来处理.这样就解决了线程出现的问题. 下面测试实例功能为单击图片,图片透明度改变为50,300毫秒后恢复不透明,代码如下: public class Demo extends Activity{ private ImageView changeImg = null;//Im

Android activity和service的生命周期对比

1Activity生命周期 七个方法 1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的onCreate事件就会被执行.如果Activity被销毁后(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行. 2. void onStart()   activity变为在屏幕上对用户可见时调用. 3. void onResume()   activity开始与

Android——Activity以及Service的启动方式

1. Activity共有四种启动方式(android:launchMode) (1) standard:默认方式,不用再次配置 standart模式就是一个栈的模式,默认每次跳转到一个新的Activity都会新建一个实例,不管这个实例是否存在.每次跳转就新建,压栈,每次返回就pop弹栈. (2) singleTop:为<activity>指定属性android:launchMode="singleTop",栈顶重复使用模式. 每次判断栈顶有没有,没有,创建:有,继续使用.

Android Activity 和 ViewGroup中事件触发和传递机制

1.在只有Activity的情况: 1)Touch事件触发流程: 首先触发dispatchTouchEvent 然后触发onUserInteraction 再次onTouchEvent 如果是点击的话,紧跟着下列事件(点击分俩步,ACTION_DOWN,ACTION_up) 触发dispatchTouchEvent 再次onTouchEvent 当ACTION_up事件时不会触发onUserInteraction(可查看源代码) 2)键盘事件触发流程 首先触发dispatchKeyEvent 然

Android服务类Service详细解析

Service有什么作用? 许多人不明白service是用来干嘛的,其实Service作为Android四大组件之一,可以理解为一个运行在后台的Activity,它适用于处理一些不干扰用户的长时间的后台操作,比如你播放器播放音乐之后跳到其它页面,音乐需要继续播放,那么这个时候就可以将音乐的播放一直运行在后台服务中,需要启动播放的时候就通过Activity去启动服务,再通过服务去调用播放,需要停止的时候就停止服务. 有人可能会问,Thread也可以实现后台运行,为什么不用Thread而使用Serv

关于如何关闭android中service中新开启的线程问题?

今天遇到一个问题,既在一个activity中设置一个按钮,点击按钮关闭service,而service中又新开启了一个线程,每隔一秒输出一句话,但是当调用按钮实现stopService方法后,service是可以关闭,但是service中开启的线程却一直在运行,原理上来讲从service的onDestory方法中关闭当前线程即可,可即便如此,还是会报错,贴下代码: 1 stopBtn.setOnClickListener(new OnClickListener() { 2 3 @Override