androidactivity線程
① android線程里怎麼啟動一個ACTIVITY-CSDN論壇
CSDN論壇是個討論的地方,下載資源的地方
android子線程不能進行ui操作
android子線程可以通過handler發送消息,然後主線程啟動ACTIVITY
啟動activity,可以startActivity和startActivityForResult
② Android: 一個Activity開辟的線程,在這個Activity調用finish()的時候會強制關閉這個線程嗎
不會,你可以在onDestory中手動終止該線程
③ 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的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啟用線程,沒有出錯,調試過了,不執行run()方法,附上代碼。
我 直接給你上代碼了,你看看線程是怎麼用的,希望你自己學會他!
public void OnClick(){
MyThread t1=new MyThread();
t1,start();
}
class MyThread implements Runnable {
public void run() {
你的代碼
}
}
⑥ Android中是不是新開一個activity就是新建了一個線程
不是的,Android中所有的Activity都是在一個線程中,也就是我們所說的主線程(UI線程)。另外Activity 和 線程本身是兩個跨度很大的概念。
⑦ android activity子線程和主線程的區別
絕大部分情況下,UI操作的事情只能在主線程進行,所以主線程又被成為UI線程。但是有些比較耗費時間的操作如果放在主線程處理的話,會造成主線程阻塞,主線程阻塞了,手機就會卡頓。所以耗時的操作就應該放到子線程去處理。主線程要一直處於空閑的狀態。
⑧ 在android的Activity主線程被殺死的時候,在這個Activity中創建的子線程怎麼處理,是不是也會被殺死呢
它會自己執行完的
所以才會經常出現一個異常,activity
finish了,但是activity裡面開啟的線程載入數據,完成後去修改
activity
的UI,這個時候就會報錯。因為你要賦值的那個TextView或者其他控制項已經不存在了。
⑨ 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存在。
⑩ android開發中不同的activity是否在同一個線程
首先activity是android的四大組件之一,我們看到的APP界面其實就是activity,所以activity是運行在主線程中的
其次service跟activity一樣,也是android的四大組件之一,主要實現不需要界面,在後台執行的耗時操作,但是他和activity一樣,運行在同一個進程,如果結束當前activity所在進程,service也同樣會結束,因此他們兩個是運行在同一個進程中的,但不是同一個線程,service是用來處理耗時操作的,而且不需要界面支持,既然是耗時操作,就需要放在子線程中了,所以說service和activity需要在不同的線程中
解決方法,如果想讓service運行在不同線程中可以使用Thread,也可以使用handle,使service運行在中的耗時操作運行在子線程中
或者在Manifest文件中為service設置android:process,如下圖,此時service是運行在「包名+:remote」進程裡面,注意:此時service和activity是在不同的進程裡面,當然,此時的activity結束後,也不會影響到service
我們還可以使用intentservice這個抽象類,我們可以繼承實現它裡面的方法,intentservice是直接運行在子線程裡面的,可以直接在這里實現耗時操作