当前位置:首页 » 安卓系统 » androidactivity后台

androidactivity后台

发布时间: 2022-12-21 11:44:27

A. android activity间通讯,跳转回主activity时总会刷新怎么办

总会刷新与后台设置有关系。

有可能你进行跳转后,你的主activity被回收了,你返回的是一个新的Activity,这和你的activity

设置有关。

正常的回退操作不会对activity刷新。除非你在onresume,或onrestart等方法中进行了界面操作,因

为跳转回activity是,会执行onresume或onrestart->onstart()->onresume()生命周期。

当然,除此之外还有其他多种可能,要看你的代码而定,如调用startActivityforresult进行跳转,

在接收onactivityresult()方法中处理了ui。

B. Android实现后台返回前台再次显示广告

市面上主流的APP都是在启动页做广告展示的,即通常都是叫SplashActivity的是APP的launcher页面,在manifest文件中配置, 2017年以来, 你会发现越来越多的APP在进入后台时隔一定时间后再次回到前台会再次显示广告界面, 3s自动播放, 或者手动点击跳过

比如网易云音乐, 淘宝, 京东商城啦, 似乎现在都是很主流的做法了,刚好最近项目中也有这样的需求, 我们也实现了一遍,所以写出来分享下,相互学习借鉴

要实现后台返回前台显示广告的逻辑, 主要的点在于监听APP进入后台的时间点, 和APP从后台返回到前台的时间点

我们是在Application子类中完成的, 定义三个常量记录当前APP状态

在Application中需要监听Activity的生命周期变化, 是application类已经提供好的一个方法, 它可以非常方便的监听整个项目中的所有activity的生命周期

可以很清晰的看到Activity的生命周期函数都会回调到ActivityLifecycleCallbacks接口来, 我们让Application实现此接口, 并在相应的回调方法中的完成具体的后台状态的监听

定义几个需要用的变量记录相关状态和时间

在onResume回调中监听回到前台的判断, 只要activity一旦获取焦点这个方法都会触发,并且会触发多次

在onStop回调中监听程序进入后台的判断

在onTrimMemory中监听应用程序的切换,这也是一种监听方式.因为有时候onStop的回调不一定会完全执行(尤其是切换最近使用APP列表时),所以这个方法也是必须的

最后, 就可以得到当前APP的准确状态(sAppState)了, 是否可以再次显示广告

测试过程中,发现大部分品牌的手机都是OK的, 但是也有意外的,OPPO R9在切换应用时,一个回调都没触发,一定是Color OS改动太大, 目前尚无法处理.OV手机适配起来就是费劲啊

最后补充一个判断程序是否前台的API

各位大佬们如果有更好的实现,欢迎提供思路!

C. Android 同一个程序在后台有两个Activity

如果不是你想要的 , 检查Androidmanifast文件中的 taskAffinity 和 launchMode

LaunchMode 设置为single Task 其他不会新开栈队列的也可以

taskAffinity 从androidmanifest 中移除,有需要用到的android大佬别看了

重新打包android 发现只有一个activity 在后台展示了

D. 如何使安卓软件中的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();
}
}

E. Android app后台回到前台时的监听

在一次项目,有个需求涉及到切后台回到app时,需要调起一个弹窗,以这个需求为例子,跟大家分享下我如何实现的(大牛轻拍 = = )

首先,我们在app初始化时,要注册activity生命周期的回调,我这边项目里在BaseApplication初始化时调用()

它需要一个ActivityLifecycleCallbacks类型的参数

这个接口涉及到所有activity生命周期的回调

回归正题,先初始化ActivityLifecycleCallbacks,

我们现在要做的是后台回前台,所以我们只选择onActivityStarted和onActivityPaused

我是这么做判断的,给个foregroundActivityCount去表示当前app有多少个activity处于启动的状态,给个Boolean值appInBackground判断app是否处于后台,每次打开app,当启动一个activity时,就统计开启activity的次数,并且调用你所需要的监听方法;只要在start 和 stop时判断有所activity都stop了,当当前activity启动次数为0时,说明app处于后台;

初始化已经完成,接下来就是怎么调用了。我们去到后台回来时需要操作的activity或者fragment,在初始化时调取BaseApplication里面刚才设定的方法

在里面写下你后台回来时你需要的操作

还有一个缺陷,假如是在指定fragment做监听怎么办?其实都差不多的,fragment在activity里,绑定 了activity的生命周期,假设我们要在指定的fragment才调取这个方法,我们需要在加一层判断,判断当前fragment是否可见

这样,只要你每次从后台回来,都可以监听到,但如果不在当前fragment的话,就不会调用你设定的方法。

以上,是我刚接触不久的问题,分享给大家,写的不好的大家见谅,有问题可以评论或私信我,本人还是实习生,请轻拍= =

F. 安卓开发:如何得知当前activity是被压入后台,还是跳转到新的activity

最近学习安卓开发activity的生命周期,对单个活动的生命周期较为熟悉。此时师兄抛出问题,当一个activity进入 onStop() 时,如何得知时由于用户点击了主页键,还是由于进入了另一个本程序的activity?

查阅网络资源后,得知可以通过安卓本身的多种方法来判断。不过某些方法的使用需要获取用户授权,或者需要较高版本的安卓系统。不过本文主要介绍通过activity本身的生命周期回调函数来判断。

由于设计两个activity的跳转,所以我们应该去考虑多个activity的生命周期回调函数顺序。查阅并测试可知,当进行activity跳转时,先执行原来activity的 onPause() 和,然后执行第二个activity的 onCreate() 、 onStart() 、 onResume() ,再执行第一个activity的 onStop 。如图所示,红色是第一个activity的回调函数执行,蓝色是第二个。

我们可以利用这个特点,通过一个static变量来记录当前run的activity数量,当这个数量为0的时候,即程序被压入后台,当这个数量不为0,则表明当前执行了一个跳转操作。

首先新建一个 BaseActivity 类,声明一个static变量,让别的activity全部继承。并在 onStart() 和 onStop() 中修改 count 。

创建 MainActivity 类,继承自 BaseActivity 类,同时修改 onStop() ,检查 count 的值,判断此次导致 onStop() 的原因。我在这个activity中添加了一个button用于跳转到第二个activity。

这个类很简单,没有什么功能,只是跳转过来后,执行基类的 onCreate() 方法。

至此,我们便实现了通过activity生命周期回调函数判断是否被压入后台。不过,后来学长针对我的这种方式提出了漏洞——当引用外部SDK,且外部SDK中可以弹出未继承我们自定义的base基类的activity,那么怎么处理这种情况呢?这里就要用到安卓SDK提供的全局生命周期类了——Application.,这里我们之后再谈。

G. 如何使安卓软件中的Activity在后台以及关闭屏幕后能继续运行

需求违背taskstack设计bacticvity返弹栈销毁能继续存尝试用别比线程intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并设置台运行设置intent启activity优先创建新taskactivity做该taskroot实向要activityb按返候activitya同b销毁要重写onKeyDown调更改返按钮行改启activitya注意给a设置singleTask建议做即使要让B台运行要写线程所要做任务封装线程自控制

H. 关于安卓intent启动activity的几种情况

我们一般写的比较简单的方法就是starActivity(new Intent(context,A.class)).这种启动的方式很简单,就是一个从当前界面跳转到下一个activity界面。

首先我们先要说一个问题,当你有弹窗信息,或者通知栏里面出现了通知,然后你点击进去,不知道你有没有在意,APP会在五秒钟之后打开,当然,有的不会 大多数还是会的。现在我们就说一下这个问题

在谷歌的 Android API Guides 中,特意提醒开发者不要在后台启动 activity,包括在 Service 和 BroadcastReceiver 中,这样的设计是为了避免在用户毫不知情的情况下突然中断用户正在进行的工作.

就是当通过 home 键将当前 activity 置于后台时,任何在后台startActivity 的操作都将会延迟 5 秒,除非该应用获取了 "android.permission.STOP_APP_SWITCHES" 权限.但是这个权限是系统级别的权限.

解决方法:

不能够用传统的startActivity来启动Activity

Intent intent = new Intent(context, A.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);

而是要用以下形式来启动Activity:

Intent intent = new Intent(context, A.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pendingIntent =

PendingIntent.getActivity(context, 0, intent, 0);

try {

pendingIntent.send();

} catch (PendingIntent.CanceledException e) {

e.printStackTrace();

}

OK,这种方式启动activity,一般是用在有后台任务的时候

starActivityforResult(),里面有两个参数,一个是intent,还有一个是requestcode,当你启动下一个界面的然后又关闭的时候,会得到一个返回值,这个返回值就是这个requestcode,你需要做的就是通过onActivityforResult()方法去进行对这个requestcode进行判断,处理好相应的逻辑

这个文章是我睡前写的,手机上面实在不好打字

I. 在android中,设置一个activity在后台运行

这个需求违背了task stack的设计,b acticvity返回之后 弹栈就会销毁的 不能继续存在,你可以尝试用别的方法比如线程。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并不是设置后台运行,而是设置这个intent启动的activity优先创建一个新的task将这个activity做为该task的root。
如果实在是向要在activity b中按返回的时候回到activity a 同时b不销毁,那就要重写onKeyDown回调来更改返回按钮的行为了,改为启动activity a。但是注意给a 设置 singleTask。
但是不建议这么做,因为即使你要让B在后台运行,你也是要写线程的,所以最好是把要做的任务封装到一个线程里去,然后自己控制。

J. 请问,如何使安卓软件中的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);
}
}
热点内容
java开发详解pdf 发布:2025-04-02 16:02:07 浏览:834
三星手机内存和存储 发布:2025-04-02 15:53:55 浏览:527
中国电脑配置用什么系统 发布:2025-04-02 15:51:26 浏览:185
linuxcp脚本 发布:2025-04-02 15:28:38 浏览:972
部队微视频脚本 发布:2025-04-02 15:20:36 浏览:920
路由器的WAN口怎么配置Vlan 发布:2025-04-02 15:16:13 浏览:944
海龟编译日期 发布:2025-04-02 15:11:08 浏览:932
2021大众polo炫彩有什么配置 发布:2025-04-02 14:53:52 浏览:858
php数组长度排序 发布:2025-04-02 14:48:45 浏览:465
朗逸换压缩机 发布:2025-04-02 14:42:25 浏览:415