导航:首页 > 操作系统 > 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相关的资料

热点内容
androidapp风格 浏览:206
php取服务器url地址 浏览:291
linux时间调度算法 浏览:767
单片机最小电路详解 浏览:181
请求要求命令 浏览:802
电脑文件夹发微信显示被占用 浏览:290
手机怎么看加密视频 浏览:202
怎样解压手机es文件包 浏览:661
2017年学什么编程 浏览:934
金融期货pdf 浏览:692
程序员客栈的信息保密吗 浏览:507
编程显示器什么意思 浏览:147
网络编程的就业 浏览:260
s7200编程入门 浏览:748
华润万家app为什么进不去 浏览:250
后台运行app命令 浏览:874
通达信云加密能破解 浏览:141
邮件保存成pdf 浏览:867
bbs网站java源码下载百度云 浏览:460
php无限极分类树 浏览:275