Articles of 任务

如何完成另一项活动的活动

如果活动A与任务T1相关,而活动B与任务T2相关,那么我如何从活动B完成活动A? 我需要这个,因为我的应用程序可以从其快捷方式或通过通知开始。

进程名称是否与android中的包名称相同?

通过过程,我的意思是我们提供的android:process和包我的意思是在包中 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.osg.appkiller" android:versionCode="1" android:versionName="1.0" > 更多细节进程和线程 – Android开发人员 我想获取所有正在运行的应用程序的应用程序名称 所以这就是我在查看各种资源之后所做的(并且它是有效的)。 ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); PackageManager packageManager = getPackageManager(); final List<RunningAppProcessInfo> runningProcesses = activityManager.getRunningAppProcesses(); for(RunningAppProcessInfo processInfo : runningProcesses) { CharSequence appName = null; try { appName = packageManager.getApplicationLabel(packageManager.getApplicationInfo(processInfo.processName, PackageManager.GET_META_DATA)); } catch (NameNotFoundException e) { Log.e(TAG,"Application info not found for process : " + […]

在Android中使用JobScheduler调度作业

我在新的Android API 21中使用JobScheduler计划的作业存在问题。这是我以60秒间隔计划作业的代码,如下所示: ComponentName serviceName = new ComponentName(this, MyJobService.class); JobInfo jobInfo = new JobInfo.Builder(0, serviceName) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setPeriodic(60000) .build(); 我的JobService只在Logcat中打印运行时间,但日志显示服务在这个时候运行: 03-18 08:37:26.334: I/JOB(32662): Wed Mar 18 08:37:26 BRT 2015 03-18 08:37:56.364: I/JOB(32662): Wed Mar 18 08:37:56 BRT 2015 03-18 08:39:21.418: I/JOB(32662): Wed Mar 18 08:39:21 BRT 2015 03-18 08:41:51.670: I/JOB(32662): Wed Mar 18 08:41:51 BRT 2015 […]

android任务杀死

我想杀死像在任务杀手那样在android中运行的所有任务…到目前为止我所做的是: ActivityManager manager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); List<RunningAppProcessInfo> activityes = ((ActivityManager) manager).getRunningAppProcesses(); for (int i = 0; i < activityes.size(); i++){ Log.e("APP: "+i, activityes.get(0).processName); if (!activityes.get(0).processName.equals("app.android.myapp")){ Process.killProcess(activityes.get(0).pid); } } 代码的问题是,它只返回activityes列表我的应用程序12次。 没有任务正在被杀 有人可以帮我吗? 谢谢!

Android:FLAG_ACTIVITY_NEW_TASK在同一个过程中有效吗?

假设应用程序已经有一堆活动,然后从应用程序上下文中用FLAG_ACTIVITY_NEW_TASK启动新的活动。 这发生在相同的过程中,即在应用程序内,像这样: AppContext -> A(FLAG_ACTIVITY_NEW_TASK) -> B -> C; AppContext -> D(FLAG_ACTIVITY_NEW_TASK) 根据文档,我们现在有2个任务: Task 1: A, B, C; Task 2: D 从文档来看,理论上用户可以独立地切换到活动C或活动D,因为它们属于不同的任务。 然而,在实践中,我无法切换到活动C–它总是转向D. 我的问题是:是否真的如果在与FLAG_ACTIVITY_NEW_TASK相同的过程中启动,任务不是独立的,用户只能切换到最顶层任务的最顶层活动? 如果答案是“否”,那么用户切换到任务1的方式是什么? UPDATE 答案是: 不 这些任务是独立的,用户可以独立地在他们的活动之间切换,有效地在您的应用程序的顶部有两个活动。 我刚刚在提出原始问题三年后才find用例。 我们的应用将自己注册为URLscheme的处理程序(如market://xxx.yyy/zzz )。 现在让我们想象一下,用户使用启动器启动了应用程序,进入了某个东西(活动A, B, C )的中间,然后离开了。 然后在浏览器中用户点击一个URL,以便我们启动其他活动(活动D )。 这导致在同一时间有两个任务:活动A, B, C ( C上面)和活动D 用户可以通过任务历史在这两个活动之间切换。 有趣的是,活动C在任务历史中可以看到应用程序自己的图标,但活动D可以通过浏览器的图标看到。 无论如何,都可以切换到。 而且, ABC和D这两个任务都在相同的过程中运行。 这意味着所有的singletone对象和静态数据在它们之间共享。 因此,如果不采取谨慎的态度,他们可能会腐败对方的国家。

应用程序失去了从另一个应用程序启动时记住它的堆栈的能力

现在我已经研究了这个,我正在重写这个,使之更加清晰。 如果你正在寻找更多的信息,有一些更旧的编辑。 发生什么事: (这是指没有设置任何launchMode设置的应用程序,因此使用默认值) 您从市场或安装程序启动应用程序。 这会使用FLAG_ACTIVITY_NEW_TASK标志启动应用程序的根/主活动,并且不会有任何类别。 现在应用程序堆栈是[A] 然后,继续进行应用程序中的下一个活动。 现在这个任务中的堆栈是[A> B] 然后按Home键,然后通过从主屏幕或应用程序托盘中按图标来重新启动相同的应用程序。 现在预计什么是B活动,因为那是你离开的地方。 但显示A并且任务堆栈是[A> B> A]使用以下标志启动A的第二个实例:FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_RESET_IF_NEEDED和FLAG_ACTIVITY_BROUGHT_TO_FRONT。 它也有android.intent.category.LAUNCHER类别。 此时,如果您按下后退键,则会返回到B,就像您离开时一样。 查看文档,看起来好像FLAG_ACTIVITY_BROUGHT_TO_FRONT只应该为使用singleTask或singleTop launchModes的活动设置。 但是,此应用程序尚未设置任何launchModes,因此使用默认的标准launchMode。 我认为这不是在这种情况下发生? 我也应该注意到,一旦进入这个奇怪的状态,那么每当从主屏幕或应用程序托盘启动应用程序,就会发生。 如果任务完成(重新启动手机,强制停止应用程序,或者一直通过堆栈),将解决此问题,并将不再正确启动它。 只有当您从安装程序或市场启动应用程序,然后尝试从启动器启动应用程序才会发生。 总之,为什么会这样呢? 有没有办法阻止它?

任务杀手杀死应用程序和Android操作系统杀死应用程序的区别

使用任务杀手应用程序杀死应用程序会发生什么情况与Android操作系统由于资源稀缺而杀死应用程序时会发生什么区别? Android SDK表示,由于资源稀缺,操作系统杀死应用程序时,不会调用Application.onTerminate()方法。 所以这听起来像操作系统并没有干净地closures应用程序,而且它确实做到了争议激烈的任务杀手所做的事情。 如果他们做同样的事情,那么任务杀手不会比操作系统本身造成更多的伤害,对吧?

Android:如何使启动器始终打开主要活动而不是儿童活动? (或其他)

我有活动A和B. A是LAUNCHER意图filter(即当我们点击主屏幕上的应用程序图标时启动的活动)。 A使用startActivity(new Intent(A.this, B.class))启动B startActivity(new Intent(A.this, B.class)) 。 当用户打开B活动,然后将我的应用程序放入后台,之后我的应用程序的进程被终止,当用户再次启动我的应用程序时,打开B而不是A. 这导致我的应用程序closures的力量,因为A是初始化我的应用程序需要的资源的活动,当B试图访问未初始化的资源,B崩溃。 你有什么build议,在这种情况下我该怎么办?

Android:OutOfMemory错误和后台

下面的图表代表了这个问题关于应用程序的工作stream程。 我遇到了OutOfMemory错误的问题,主要是因为用户能够多次从活动B切换到活动D(每次尝试都显示不同的内容),而不会破坏以前的活动。 这导致了一个非常大的后台堆栈导致OutOfMemory错误。 为了避免这种情况,我按照build议将父活动添加到清单中,并使用TaskStackBuilder类创build新的后台堆栈: void openDFromB() { Intent i = new Intent(this, ActivityD.class); TaskStackBuilder.create(this) .addParentStack(ActivityD.class) .addNextIntent(i) .startActivities(); } 如果用户现在从活动B切换到D,则MainMenu,A和B将被销毁,并创build一个新的Backstack(MainMenu,C,D)。 这解决了我的记忆问题的api级别大于10,但不幸的是,TaskStackBuilder不创build设备pre api 11的backstacks。 任何想法为了避免用户在api 11之前堆积无数的活动,该怎么做? 这是否甚至可能,或者我应该尽量在onPause中尽可能多地释放资源,以在OoM之前获得最大数量的堆叠活动? 提前致谢!

在特定时间启动应用程序

我想知道是否有可能(如果是这样)在特定的时间启动我的应用程序,就像在特定时间发生的闹钟一样。 比方说,我希望我的应用程序在早上8点启动,这是可行的吗?