继续我学习Android的尝试,我只是阅读以下内容:
问题:用户是否可以选择终止应用程序,除非我们使用菜单选项来杀死它?如果不存在这样的选项,用户如何终止该应用程序?
答案:(Romain Guy):用户没有,系统会自动处理.这就是活动生命周期(特别是onPause/onStop/onDestroy)的用途.无论你做什么,都不要放"退出"或"退出"应用程序按钮.它与Android的应用程序模型无关.这也与核心应用程序的工作方式相反.
呵呵,我在Android世界中采取的每一步都会遇到某种问题=(
显然,你无法在Android中退出应用程序(但Android系统可以很好地完全破坏你的应用程序).那是怎么回事?我开始认为编写一个充当"普通应用程序"的应用程序是不可能的 - 用户可以在他/她决定这样做时退出应用程序.这不应该依赖操作系统来做.
我尝试创建的应用程序不是Android Market的应用程序.它不是一般公众"广泛使用"的应用程序,它是一个将用于非常狭窄的业务领域的商业应用程序.
我实际上真的很期待为Android平台开发,因为它解决了Windows Mobile和.NET中存在的许多问题.然而,上周对我来说有点懈怠...我希望我不必放弃Android,但它现在看起来不太好=(
有没有办法让我真的退出申请?
我想Android不会让人们这样做,因为他们认为他们有完美的任务/应用程序处理.但是,在我的情况下,我真的需要这样做.
我有一个活动A作为我的申请的入口点.在该活动中,它读取偏好并决定开始哪个活动,比如B或C.之后,它完成自己.因此,活动A永远不会出现在用户身上.
我的应用程序将东西存储在SD卡上,并不断读取它.因此,当卸载SD卡时,我需要向用户显示sdcard不可用的消息,而不是打开B或C.我在A中设置一个检查以在sdcard不可用时显示该消息.显示该消息时,A不会尝试启动B或C.
如果用户只从应用程序启动器输入我的应用程序,事情就会完美.但是,我发现用户也可以通过长按home进入我的应用程序并从最近的应用程序列表中选择它,如果他最近打开它.当用户这样做时,它跳过A并直接转到B或C.我没有检查它们,因此在我尝试访问sdcard时抛出异常,并弹出强制关闭对话框.
我可以简单地将支票移到B和C来解决这个问题.但是在未来,从A开始的活动数量将会增加.如果有6个,我需要将此支票复制到6个地方.毋庸置疑,这看起来非常难看,而且是一场维护噩梦.
因此,最好的解决方案应该是在卸载SD卡时从最近的应用程序列表中删除我的应用程序.但是,我找不到如何做到这一点.即使终止进程或使用ActivityManager.restartPackage,它仍会出现在列表中.谁能告诉我如何从列表中删除它?
我正在尝试在android中构建任务杀手类型的应用程序.我可以使用ActivityManager显示当前正在运行的任务列表,但在杀死任务时遇到问题.
这是我正在做的获取当前正在运行的任务的列表:
ActivityManager am = (ActivityManager) context.
getSystemService(Activity.ACTIVITY_SERVICE);
List<RunningTaskInfo> a=am.getRunningTasks(Integer.MAX_VALUE);
PackageManager pack=this.getPackageManager();
for(int i=0;i<a.size();i++){
String packageName = a.get(i).topActivity.getPackageName();
Drawable d=null;
String appName="";
try {
d=pack.getApplicationIcon(packageName);
appName=(String) pack.getApplicationLabel(pack.getApplicationInfo(packageName,PackageManager.GET_META_DATA));
} catch (NameNotFoundException e) {
e.printStackTrace();
}
packName.add(packageName); //arraylist of package name
apps.add(appName); // arraylist of app name
icons.add(d); //arraylist of icons
}
Run Code Online (Sandbox Code Playgroud)
它对我有用但现在我正在尝试使用killBackgroundProcesses杀死任务:
am.killBackgroundProcesses(package name);
Run Code Online (Sandbox Code Playgroud)
那没起效 .此外,killBackgroundProcesses方法在API级别2.2中可用,那么我如何在以前的API级别(如1.6等)中执行相同的任务.
有没有其他方法来显示当前活动的应用程序并杀死它们.
请帮忙 .
非常感谢.
我试图杀死我的另一个应用程序.但是这段代码无法杀死我的另一个应用程序.我知道杀死另一个应用程序是一个坏主意.但我有学习目的,我试图杀人.我的代码部分:
Button runningApp = (Button) findViewById(R.id.runningApp);
runningApp.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String nameOfProcess = "com.example.filepath";
ActivityManager manager = (ActivityManager)ApplicationActivity.this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : listOfProcesses)
{
if (process.processName.contains(nameOfProcess))
{
Log.e("Proccess" , process.processName + " : " + process.pid);
android.os.Process.killProcess(process.pid);
android.os.Process.sendSignal(process.pid, android.os.Process.SIGNAL_KILL);
manager.killBackgroundProcesses(process.processName);
break;
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
我添加了权限,它们是:
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
Run Code Online (Sandbox Code Playgroud)
每次我看到LogCat时,特定的应用程序都在后台运行.我哪里弄错了?
按住手机上的主屏幕按钮会弹出一个弹出窗口,显示最近的应用程序.有谁知道如何通过代码执行相同的操作?我需要能够在列表视图中选择一个.
我试图通过一个程序删除所有最近的任务.在发布问题之前,我用Google搜索了,但没有运气.
我尝试使用ActivityManager.killBackgroundProcess(pckagename),但它也没有从最近的任务列表中删除任务.
我也试过Android的链接 ,如何清除最近的任务列表哪个可以从大多数手机的主页按钮获取?反思是一种可能的方式吗?
我总是得到以下异常
java.lang.SecurityException:Permission Denial:removeTask()from pid = 23297,uid = 10051需要android.permission.REMOVE_TASKS
即使我已经android.permission.REMOVE_TASKS在清单中指定了权限.
我们如何以编程方式清除最近的任务列表,以便用户在最近的任务列表中看不到最近的任务?