導航:首頁 > 操作系統 > android休眠activity

android休眠activity

發布時間:2022-06-13 19:25:07

android 如何讓手機進入休眠狀態,又如何喚

1.WakeLock主要代碼如下:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getName());//持有喚醒鎖
wakeLock.setReferenceCounted(false);
wakeLock.acquire(30*1000);//30s亮屏
wakeLock.release();//釋放鎖,滅屏

2.FLAG_KEEP_SCREEN_ON代碼如下
可使用 FLAG_KEEP_SCREEN_ON 替換WakeLock的方式.
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//亮屏
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//滅屏

② 安卓開發activity怎麼在主線程中sleep

在onCreate()或onResume()方法里直接調用Thread.sleep(1000)就可以。這里1000表示1秒。

不過這樣做很容易導致app停止響應,即ANR。

③ 如何管理Android中Activity的生命周期

一、基礎

1.1自己創建的activity必須要繼承類Activity(或其子類)。在activity里,為了實現activity各種狀態的切換,你必須實現指定的回調方法。以下是最為重要的兩個回調方法

onCreate():

這是必須實現的回調方法,啟動一個 activity時會首先調用此方法。因此,在onCreate()的方法體里,你應該初始化該activity必要的控制項。值得注意的是,在這里你必須調用setContentView(View view)方法去呈現用戶的界面。

onPause():

在用戶將要離開activity時調用此方法(指的是此時activity處於半透明狀態且沒有獲取用戶的焦點)。通常在這樣的狀態下,你需要處理用戶數據的提交、動畫處理等操作。

1.2銷毀activity

你可以調用finish()方法去銷毀一個activity。同樣得,你可以調用finishActivity()方法去銷毀一個你剛剛啟動的activity。

tips:

在多數情況下,你是不需要顯式地調用finish…()方法去銷毀一個activity。在將要討論到的activity生命周期里,你可以知道,Android系統會為你管理activity的生命周期,所以你並不需要顯式銷毀activity(即調用finish類方法)。顯式地調用finish類方法,會對用戶的體驗產生不利的影響,除非你確實是不希望用戶返回到此activity(界面),才去顯式調用finish類方法。

二、認識activity的生命周期

2、1

Activity的生命周期對它的任務、backstack和與此有關聯的activity有著直接的影響。因此想開發出一個健壯的有彈性的Android程序,你需要學會如何去管理activity的生命周期(即調用各種回調方法)。

activity的生命周期主要包含一些三種狀態:

(1)運行態(Resumedstate)

此時Activity程序顯示在屏幕前台,並且具有焦點,可以與用戶的操作進行交互,如向用戶提供信息、捕獲用戶單擊按鈕的事件並做處理。

(2)暫停態(PausedState)

此時Activity程序失去了焦點,並被其他處於運行態的otherActivity取代在屏幕顯示,但otherActivity程序並沒有覆蓋整個屏幕或者具有半透明的效果—此狀態即為暫停態。處於暫停態的Activity仍然對用戶可見,並且是完全存活的(此時Activity對象存留在內存里,保留著所有狀態與成員信息並保持與窗口管理器的連接)。如果系統處於內存不足的情況下,會殺死這個Activity。

(3)停止態(StoppedState)

當Activity完全被另一個otherActivity覆蓋時(此時otherActivity顯示在屏幕前台),則處於停止態。處於停滯態的Activity依然是存活的(此時Activity對象依然存留在內存里,保留著所有的狀態和與成員信息,但沒有與窗口管理器保持連接),而且它對用戶是不可見的,如果其他地方需要內存,系統會銷毀這個Activity。

處於暫停態(PausedState)或者停止態(Stopped
State)的Activity,系統可以通過調用finish()方法或者直接終止它的進程來銷毀此Activity(從內存中清楚此Activity對象)。被finish()或者銷毀的Activity再重新打開時,是需要再次初始化此Activity的。

2、2

當一個Activity從一種狀態轉到另一種狀態時,會通過調用回調方法來通知這種變化。這些回調方法都是可以重寫的,你可以根據程序的的需要來選擇重寫對應的回調方法。以下列出了Activity生命周期里的基本回調方法:

public class ExampleActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// The activity is being created.

}

@Override

protected void onStart() {

super.onStart();

// The activity is about to become visible.

}

@Override

protected void onResume() {

super.onResume();

// The activity has become visible (it is now
"resumed").

}

@Override

protected void onPause() {

super.onPause();

// Another activity is taking focus (this activity is
about to be "paused").

}

@Override

protected void onStop() {

super.onStop();

// The activity is no longer visible (it is now
"stopped")

}

@Override

protected void onDestroy() {

super.onDestroy();

// The activity is about to be destroyed.

}

}

筆記:在方法體里,必須先調用父類對應的實現方法super.Xxx(),再執行其他的操作(如上面代碼所示)。為了習慣,下面也提供一些代碼來測試一些這些方法的使用,在博客的最後面。

總的來說,這些回調方法定義了Activity整個生命周期。在生命周期里通過重寫這些回調方法,,你可以監控以下下三個嵌套的方法循環。

完整存活的時間:

Activity的完整存活的時間是自第一次調用onCreate()開始,直至調用onDestroy()為止。Activity在onCreate()中設置所有「全局」狀態以完成初始化,而在onDestroy()中釋放所有系統資源。例如,如果Activity有一個線程在後台運行從網路下載數據,它會在onCreate()創建線程,而在 onDestroy()銷毀線程。

可見狀態的時間:

Activity的可見狀態是自onStart()調用開始直到相應的onStop()調用結束。在此期間,用戶可以在屏幕上看到Activity,盡管它也許並不是位於前台或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中注冊一個BroadcastReceiver來監控會影響UI的變化,而在onStop()中來注消。onStart() 和 onStop() 方法可以隨著應用程序是否為用戶可見而被多次調用。

顯示在前台的時間:

Activity的前台顯示是自onResume()調用起,至相應的onPause()調用為止。在此期間,Activity位於前台最上面並與用戶進行交互。Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的Activity啟動時,將調用onPause() 方法。當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。

④ 如何使安卓軟體中的Activity在後台以及關閉屏幕後能繼續運行

要實現軟體後台運行,只需要改寫返回鍵事件監聽,使得back鍵功能類似home鍵,讓Acitivty退至後台時不被系統銷毀,代碼如下:
public boolean onKeyDown(int keyCode, KeyEvent event) {
PackageManager pm = getPackageManager();
ResolveInfo homeInfo =
pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), 0);
if (keyCode == KeyEvent.KEYCODE_BACK) {
ActivityInfo ai = homeInfo.activityInfo;
Intent startIntent = new Intent(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.setComponent(new ComponentName(ai.packageName, ai.name));
startActivitySafely(startIntent);
return true;
} else
return super.onKeyDown(keyCode, event);
}
private void startActivitySafely(Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "null",
Toast.LENGTH_SHORT).show();
} catch (SecurityException e) {
Toast.makeText(this, "null",
Toast.LENGTH_SHORT).show();
}
}

⑤ android開發中如何捕捉自動休眠灰屏的這個事件

捕捉自動休眠灰屏的事件,可以通過監聽系統的廣播獲得當前手機屏幕的狀態,廣播需要在注冊文件中注冊,具體的實現代碼如下:

public class ScreenListener {
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;

public ScreenListener(Context context) {
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
}

/**
* screen狀態廣播接收者
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver {
private String action = null;

@Override
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) { // 開屏
mScreenStateListener.onScreenOn();
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 鎖屏
mScreenStateListener.onScreenOff();
} else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解鎖
mScreenStateListener.onUserPresent();
}
}
}

/**
* 開始監聽screen狀態
*
* @param listener
*/
public void begin(ScreenStateListener listener) {
mScreenStateListener = listener;
registerListener();
getScreenState();
}

/**
* 獲取screen狀態
*/
private void getScreenState() {
PowerManager manager = (PowerManager) mContext
.getSystemService(Context.POWER_SERVICE);
if (manager.isScreenOn()) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}

/**
* 停止screen狀態監聽
*/
public void unregisterListener() {
mContext.unregisterReceiver(mScreenReceiver);
}

/**
* 啟動screen狀態廣播接收器
*/
private void registerListener() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}

public interface ScreenStateListener {// 返回給調用者屏幕狀態信息
public void onScreenOn();

public void onScreenOff();

public void onUserPresent();
}
}

在上面的代碼中,用到了動態注冊廣播,在需要監聽屏幕狀態的activity中,當不需要監聽的時候,如activity finish的時候,使用unregisterListener解除廣播監聽;
下面是在Activity中調用;
ScreenListener l = new ScreenListener(this);
l.begin(new ScreenStateListener() {

@Override
public void onUserPresent() {
Log.e("onUserPresent", "onUserPresent");
}

@Override
public void onScreenOn() {
Log.e("onScreenOn", "onScreenOn");
}

@Override
public void onScreenOff() {
Log.e("onScreenOff", "onScreenOff");
}
});

通過以上步驟即實現了對屏幕狀態的監聽.

⑥ Android應用禁止屏幕休眠的幾種方法

方法一:添加休眠鎖,休眠鎖必須成對出現。

方法二:在Activity布局中設置Windows屬性進行控制,但是一定要在載入布局之前執行,此種方法的局限性是只有在Activity類中有效,Activity退出時失效。

方法三:在View布局中添加屬性,此種方法的好處是不一定非要在Activity界面運行時屏幕常亮才有效,View啟動後可以自主設置。

View的xml布局中加入:

⑦ android中 進入到下一個activity時 不銷毀前一個怎麼做

進入休眠狀態。

Activity 有幾個狀態。。。。跳轉時,設置成休眠即可。

具體你網路下~~
我也忘記了 很長時間沒有高了

⑧ Android 怎麼讓程序一直處於pause狀態

onpause
用於由一個activity轉到另一個activity、設備進入休眠狀態(屏幕鎖住了)、或者有dialog彈出時
onstop
用於不可見的activity(有對話框彈出時,這時底下的activity仍然可見,所以此時onstop不會被調用)
從下面的日誌日誌可以看出區別:
1.從firstactivity跳到secondactivity時
firstacvity
--->
oncreate
firstacvity
--->onstart
firstacvity
--->onresume
firstacvity
--->onpause
secondactivity--->oncreate
secondactivity--->onstart
secondactivity--->onresume
firstacvity
--->onstop
現在給androidmainfest.xml中的seconedactivity屬性加入android:theme="@android:style/theme.dialog",則seconedactivity將以對話框形式出現,不會對firstacvity形成遮蓋.
這時的狀態輸出為:
firstacvity
--->
oncreate
firstacvity
--->onstart
firstacvity
--->onresume
firstacvity
--->onpause
secondactivity--->oncreate
secondactivity--->onstart
secondactivity--->onresume
這時firstacvity比完全遮蓋時少調用了onstop方法.
以下兩種情況下
都只會觸發onpause而不會觸發onstop
1.
一個透明的包含dialog的activity
出現
2.
按poweroff鎖屏
顯示一個非activity的dialog,是不會調用onpause和onstop的,因為此dialog屬於activity

⑨ android編程 鎖頻後activity被殺死問題

android:configChanges="orientation"
你的程序不是被殺死,否則你再打開就不會是你的程序了。只是由於你沒有給這個activity聲明橫豎屏,導致的。你那個屬性避免機器後台運行時,可能被殺死。
android activity的生命周期,具體有哪些你可以網路一下。主要區別在於,初始化一些view等,要activity創建的時候,所以寫在onCreate裡面。有的邏輯不需要開始就執行,就沒必要寫在裡面。這些是生命周期的方法,不需要觸發。系統會自己調用。比如你想在activity結束的時候,清空一些數據。那麼就可以把這些操作寫在activity的onDestroy裡面,你要是都寫在oncreate裡面豈不是,activity剛啟動就執行清除數據的操作了。

⑩ 請問,如何使安卓軟體中的Activity在後台以及關閉屏幕後能繼續運行

實現activity後台運行有兩種方法:

方法一:

添加下列代碼即可:

java">Intentintent=newIntent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

方法二:

此方法其實不是主要是屏蔽Keycode_Back,讓它不結束(finish())Activity,直接顯示HOME界面。

PackageManagerpm=getPackageManager();
ResolveInfohomeInfo=pm.resolveActivity(newIntent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME),0);
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode==KeyEvent.KEYCODE_BACK){
ActivityInfoai=homeInfo.activityInfo;
IntentstartIntent=newIntent(Intent.ACTION_MAIN);
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startIntent.setComponent(newComponentName(ai.packageName,
ai.name));
startActivitySafely(startIntent);
returntrue;
}else
returnsuper.onKeyDown(keyCode,event);
}
voidstartActivitySafely(Intentintent){
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try{
startActivity(intent);
}catch(ActivityNotFoundExceptione){
Toast.makeText(this,R.string.unabletoopensoftware,
Toast.LENGTH_SHORT).show();
}catch(SecurityExceptione){
Toast.makeText(this,R.string.unabletoopensoftware,
Toast.LENGTH_SHORT).show();
Log
.e(
TAG,
""
+intent
+".MakesuretocreateaMAINintent-"
+".",
e);
}
}
閱讀全文

與android休眠activity相關的資料

熱點內容
android開機黑屏 瀏覽:564
mc純生存伺服器是什麼意思 瀏覽:436
樹莓派火焰蜂鳴器python 瀏覽:894
我的世界伺服器強制疾跑怎麼開 瀏覽:273
用什麼app看施工圖紙 瀏覽:491
張三學python函數 瀏覽:377
女子程序員照片 瀏覽:305
武漢c程序員招聘 瀏覽:681
csk跟蹤演算法 瀏覽:24
數據挖掘中用到的演算法 瀏覽:843
更改ubuntu伺服器地址 瀏覽:502
學做燒菜用什麼app 瀏覽:702
程序框圖怎麼加密 瀏覽:372
文件自解壓失敗怎麼辦 瀏覽:899
ug操作和產品命令 瀏覽:79
QQ在線表格怎麼加密 瀏覽:484
steam星際戰甲什麼伺服器 瀏覽:596
python重啟路由器腳本 瀏覽:821
java聊天窗口 瀏覽:978
單片機控制陣列led燈 瀏覽:579