androidactivity与线程
Ⅰ Android: 一个Activity开辟的线程,在这个Activity调用finish()的时候会强制关闭这个线程吗
不会,你可以在onDestory中手动终止该线程
Ⅱ android 编程中怎么关闭activity线程
在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。
1 package com.lsw;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.Message;
7 import android.util.Log;
8 public class ThreadDemoActivity extends Activity {
9 private static final String TAG = "ThreadDemo";
10 private int count = 0;
11 private Handler mHandler = new MyHandler();
12 boolean stopThread=false;
13
14 private Runnable mRunnable = new Runnable() {
15
16 public void run() {
17
18 while (!stopThread)
19 {
20 count++;
21 try
22 {
23 Thread.sleep(2000);
24 }
25 catch (InterruptedException e)
26 {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30
31 //虽然Message的构造函数是public的,但是最好是使用Message.obtain( )或Handler.obtainMessage( )函数来获取Message对象,因为Message的实现中包含了回收再利用的机制,可以提供效率。
32 Message message=mHandler.obtainMessage();
33 message.what=0;
34 message.obj=count;
35 mHandler.sendMessage(message);
36 }
37 }
38 };
39
40 @Override
41 public void onCreate(Bundle savedInstanceState) {
42 super.onCreate(savedInstanceState);
43 setContentView(R.layout.main);
44 //开启子线程
45 new Thread(mRunnable).start();
46 }
47
48 protected void onDestroy() {
49 System.out.println("-----------onDestroy------");
50 stopThread=true;
51 super.onDestroy();
52 };
53
54 class MyHandler extends Handler{
55
56 @Override
57 public void handleMessage(Message msg)
58 {
59 // TODO Auto-generated method stub
60 Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);
61 setTitle("" +msg.obj);
62 }
63 }
64
65 }
Ⅲ Android中是不是新开一个activity就是新建了一个线程
不是的,Android中所有的Activity都是在一个线程中,也就是我们所说的主线程(UI线程)。另外Activity 和 线程本身是两个跨度很大的概念。
Ⅳ android activity子线程和主线程的区别
绝大部分情况下,UI操作的事情只能在主线程进行,所以主线程又被成为UI线程。但是有些比较耗费时间的操作如果放在主线程处理的话,会造成主线程阻塞,主线程阻塞了,手机就会卡顿。所以耗时的操作就应该放到子线程去处理。主线程要一直处于空闲的状态。
Ⅳ Android开发中,我在主Activity中开启一个线程,为什么会导致系统崩溃。。
logcat截出来看看猛核。不过一般是权限没有给,或是模拟器没有蓝牙模块导致的。
manifest.xml
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
还有一种是你对UI更新,对activity中的View的刷新或是绘制只能放在主线程中执行,也就是UI线程乱前,另开线程是不行的。
Toast....这个你应该使用Handler的Message机制,不要放在非UI线程中直接执行哗知清。
Ⅵ Android开发中,除主Activity类之外的Activity类实例,是自己另开启一个线程吗就跟Thread一样
这个问题你应该去了解一下程序运行的机制到底是什么,UI线程虽然叫UI线程,但它并不是只管绘制界面,UI线程就是主线程,activity是对象,主线程调用activity对象来绘制界面,因为调用过程中是锁定的,所以也只有主者好线程可以修改UI,所有得名UI线程。既然是面向对象你就该以对象为核心,线程工作其实就是调用对象,activity之间的切换只不过就是主线程在调用不通的activity对象而已....如果不明白可以追问我,同时首裤铅也可以关注下我新建的贴纯明吧:小码农一起耕耘 。这个专门是基础交流平台
Ⅶ android:当Activity和Service 都被销毁后,如何控制其中生成的线程
1.首先
android
一个程序中
的activity
都是一个线程,service和activity也是一个线程
2.在activity
中启动一个子线程,当前activity
finish
destroy掉
子线也会运行的。
3.在service里的线程
与activity很类似
service即使停止了
线程也在运行(要先停止服务
再把最近使用的进程杀掉
线程会停止
,如果直接杀掉进程
android会再次自动启动这个service的
此时即使再停止service服务
线程也会一直运行了除非关机)
activity
finish
子线程依旧可以运行,即使程序退出了子线程也在运行
(除非在任务管理器里
把最近使用的进程杀掉)
4.JVM有很好的管理机制,系统最后会自动释放回收。作为手动回收来说,你可以调用interrupt
Ⅷ android:线程跳转到另一个activity时,新activity不能创建线程
这个问题只需要了解Activity的启动模拟即可。
Activity启动模式有4种,分别为standard、singleTop、singleTask、singleInstance。
1.standard 默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
2.singleTop 可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
3.singleTask 只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
3.singleInstance只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。