android 重新启动app

2017-08-07 18:58:30 jazdbmin1639整理 苹果6重新启动 苹果6重新启动

android 重新启动app

Q1: Android点击home键回到桌面,再点击app,原来的activity被destroy了,怎么处理

该线程如果没有跑完run方法不会被关闭,当程序终止的时候线程会被结束掉。该thread发消息给handler后handler将继续处理,是否会报错在于是否调用了该activity,及该activity的内存是否被回收。activity调用onDestroy方法后内存并没有被销毁,而是处在了activity栈的底层,当内存不够的时候,该activity的内存将被回收掉。所以在该activity的内存未回收,并且调用activity时不会报错,在该activity的内存已经被回收,并调用该activity时会报错。可以在该activity中加入标记变量来标记是否该activity被destroy,当该变量值为真时不处理该消息。追问

那怎么样才能继续留在原来的activity呢www.JI★ZHuBa.com

Q2: android怎么重启app并清理缓存

点击“设置”;
点击“全部设置”;
选择“应用”;
在程序中,找到QQ,点击;
滑动点击“清除数据”或“清除缓存”(清除数据后,需要重新登陆用户,且之前的数据全部清零);
6
大功告成,为我们的手机清空了不少内存;

Q3: android中怎么实现app的自动启动

Android手机在启动的过程中会触发一个Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(记得只会触发一次呀),在这里我们可以通过构建一个广播接收者来接收这个这个action.下面我就来简单写以下实现的步骤:2. 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app。 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class BootBroadcastReceiver extends BroadcastReceiver { //重写onReceive方法 @Override public void onReceive(Context context, Intent intent) { //后边的XXX.class就是要启动的服务 Intent service = new Intent(context,XXXclass); context.startService(service); Log.v("TAG", "开机自动服务自动启动....."); //启动应用,参数为需要自动启动的应用的包名 Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); context.startActivity(intent ); } } 第二步:配置xml文件,在receiver接收这种添加intent-filter配置 第三步:添加权限 启动APP: 因为做一个hotkey的项目,其中有几个快捷键需要启动系统自带的browser和email。因为刚刚开始学习android,在网上找到启动browser和email的方法都是利用ACTION_VIEW和SENDTO这样的intent去启动browser和email.问题来了:1.如果是这样的话,启动browser需要自己预设一个网址,然后调用浏览器打开改网址。2.启动email,也是需要自己设定一个账户地址,才能调用email去发送。但是我只是需要打开程序,不想设定死这些data。所以想用应用程序本身的intentfilter中的action,不方便了。想到我想要的功能就只是简单代替了点击图标来启动程序,因此从laucher中入手应该可以。去调用onClick中的方法就行了。最后实现如下:PackageManager pm = getPackageManager();Intent intent = pm.getLaunchIntentForPackage("packagename");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//只要是调用系统的app,就要加上这个flag,否则会抛出异常WWw.jIZHu▶bA.Com

Q4: Android中判断app何时启动和关闭的技术研究

Android开发中不可避免的会遇到需要检查app何时进入前台,何时被用户关闭。奇怪的是,要达到这个目的并不容易。检查app第一次启动并不难,但要判断它何时重新打开和关闭就没有那么简单了。
这篇文章将介绍一种判断app打开,重新打开和关闭的技术。
让我们开始吧
判断一个app打开和关闭的关键在于判断它的activities是否正在前台显示。让我们先从简单的例子开始,一个只有一个activity的app,而且不支持水平模式。这样想要判断app是打开还是关闭只需要检查activity的onStart和onStop方法即可:
[Java] 纯文本查看 复制代码

@Override

protected void onStart() {

super.onStart();

// The Application has been opened!

}
@Override

protected void onStop() {

super.onStop();

// The Application has been closed!

}
上面例子的问题在于当需要支持水平模式时该方法就失效了。当我们旋转设备时activity将会重建,onStart方法将被再次调用,这时将会错误的判断为app第二次被打开。
为了处理设备旋转的情况,我们需要增加一个校验步骤。当activity退出时启动一个定时器,用于判断短时间内app的这个activity是否又被启动,如果没有,说明用户真的退出了这个app,如果重新启动了这个activity,说明用户还逗留在这个app中。
这种校验方式也适用于拥有多个activities的app,因为从app的一个activity跳转到另一个activity也可以用这种校验方式来处理。
使用这个技术我创建了一个管理类,所有的activities在可见和不可见时都会通知这个管理类。这个管理类为每个activity处理上述的校验步骤,从而避免错误的检测。它也提供了发布订阅(观察者)模式,任何对app启动和关闭感兴趣的模块都可以通过它来得到对应的通知。
这个管理类的使用分为三个步骤:
1)把它添加到你的工程中
2)Activities在可见性改变的需要发送通知
app中所有activities都要增加下面的代码,用于可见性改变时通知管理类。最好的实现方式是把这段代码加到工程的BaseActivity中。
[Java] 纯文本查看 复制代码
@Override

protected void onStart() {

super.onStart();

AppForegroundStateManager.getInstance().onActivityVisible(this);

}
@Override

protected void onStop() {

AppForegroundStateManager.getInstance().onActivityNotVisible(this);

super.onStop();

}
3)订阅app的前台可见性改变事件
在感兴趣的模块中订阅app前台可见性改变事件,application类的onCreate函数是一个不错的地方,它可以保证每次app启动和关闭,你都能得到通知。
public class MyApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

AppForegroundStateManager.getInstance().addListener(this);

}
@Override

public void onAppForegroundStateChange(AppForegroundStateManager.AppForegroundState newState) {

if (AppForegroundStateManager.AppForegroundState.IN_FOREGROUND == newState) {

// App just entered the foreground. Do something here!

} else {

// App just entered the background. Do something here!

}

}
}
进一步的思考
有一些细节需要进一步讨论,下面讨论的几点针对具体的应用可以做微调。
校验时间
校验定时器检查app是否真的进入后台的时间间隔是多少合适呢?上面的代码设置为30秒,原因如下。
当你的app在运行时,可能存在第三方的activities会覆盖全屏幕,一些常见的例子是Google应用内购买和Facebook登录注册页面。这些情况下你的app都会被迫进入后台,前台用于显示这些第三方页面。如果把这种情况当做用户离开了你的app,显然是不对的。30秒超时设置就是用来避免这种情况的。例如当用户在30秒内完成应用内购买,大部分用户都可以做得到,那么就不会当做用户突然离开app了。
如果你的app不存在上述这种情况,我建议可以把你的校验时间设置为4秒,这样对于低配设备当屏幕旋转重新创建activity的时间间隔是合适的。
CPU休眠
可能存在的问题是当用户关闭app或者app仍处于前台时用户锁屏了,这时CPU可能不会等到定时器检测就休眠了。为了保证这种情况下定时器能够正常检测用户退出app,我们需要持有wakelock防止CPU休眠直到app关闭事件被确认。实践中相比使用wakelock,这种情况并不算问题。
判断app是如何启动的
现在我们已经知道如何检测app何时启动和关闭,但我们不知道app是如何启动的。是用户点击通知栏消息?还是点击一个链接?亦或是他们直接通过桌面图标或最近使用启动?
跟踪启动机制
首先我们需要知道在哪里检测app是如何启动的。基于前面一个例子我们可以打印出app何时启动,以及如何启动。
public class MyApplication extends Application {

public final String TAG = MyApplication.class.getSimpleName();
public enum LaunchMechanism {

DIRECT,

NOTIFICATION,

URL;

}
private LaunchMechanism mLaunchMechanism = LaunchMechanism.DIRECT;
public void setLaunchMechanism(LaunchMechanism launchMechanism) {

mLaunchMechanism = launchMechanism;

}
@Override

public void onCreate() {

super.onCreate();

AppForegroundStateManager.getInstance().addListener(this);

}
@Override

public void onAppForegroundStateChange(AppForegroundStateManager.AppForegroundState newState) {

if (AppForegroundStateManager.AppForegroundState.IN_FOREGROUND.equals(newState)) {

// App just entered the foreground.

Log.i(TAG, "App Just Entered the Foreground with launch mechanism of: " + mLaunchMechanism);

} else {

// App just entered the background. Set our launch mode back to the default of direct.

mLaunchMechanism = LaunchMechanism.DIRECT;

}

}

}
设置启动机制
现在我们可以打印app何时启动的机制,但我们没有设置它。因此下一步就是在用户通过链接或者通知启动app时我们记下它。如果没有通过这两种方式设置过,说明用户是通过点击app图标启动的。
跟踪链接点击事件
为了跟踪用户点击链接打开app,你需要找到代码中处理链接的地方,并加入下面的代码来跟踪启动机制。要确保这些代码在activity的onStart()函数之前调用。在哪些地方加入下面的代码取决于你的app架构了。
getApplication().setLaunchMechanism(LaunchMechanism.URL);
1
跟踪通知事件
不幸的是跟踪通知点击需要更多技巧,通知显示后,点击它将会打开之前绑定好的一个PendingIntent,这里的技巧是为通知的所有PendingIntents添加一个标识表明是由通知发出的。
例如当为通知创建PendingIntent时为每个intent添加如下代码:
public static final String EXTRA_HANDLING_NOTIFICATION = "Notification.EXTRA_HANDLING_NOTIFICATION";
// Put an extra so we know when an activity launches if it is a from a notification

intent.putExtra(EXTRA_HANDLING_NOTIFICATION, true);
到这一步我们需要做的就是在每个activity(统一在BaseActivity中添加)中检查这个标识。当识别到这个标识时说明是从通知启动的,这时可以把启动机制设置为通过通知。这一步应该在onCreate中处理,这样在app启动到前台之前就设置好了(会触发启动机制的打印)。
@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
Intent intent = getIntent();

if (intent != null && intent.getExtras() != null) {

// Detect if the activity was launched by the user clicking on a notification

if (intent.getExtras().getBoolean(EXTRA_HANDLING_NOTIFICATION, false)) {

// Notify that the activity was opened by the user clicking on a notification.

getApplication().setLaunchMechanism(LaunchMechanism.NOTIFICATION);

}

}

}
本文接近尾声了,到这里你应该已经掌握了如何检测app何时启动和关闭,以及它是如何启动的。

Q5: android的应用强制关闭之后怎样能让他自动开启

我的方法是自定义一个继承于UncaughtExceptionHandler,然后在自定义的Application里初始化他,这样可以全局捕获app的异常,不会弹出anr窗口,里边可以处理诸如让它遭遇异常后选择重启,保存错误日志等等。重启app会吧,异常处理的时候用intent启动你主activity的action。写法可以网上搜搜,如果参考我的留个邮箱发给你追问

185-493-676是我的口口号邮箱也是这个,不能直接留邮箱哦追答

熬夜易猝死 ------

发过去了,可以试试,这么用

android的应用强制关闭之后怎样能让他自动开启

追问

哈哈。。已收到,谢谢,现在好像还不晚吧。。想起猝死我都不想做这个了追答

activity里有几个生命周期是activity被系统强制回收才会调用的方法,也可以照这个思路看看更多追问

小提示:内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。

苹果6重新启动 推荐文章:
推荐不满意?点这里  ››  

苹果6重新启动