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存在。