当我使用Android市场上的"打开"按钮启动时,我在应用程序中遇到了一个错误.似乎从市场上推出它会使用不同的意图,然后从手机的应用程序菜单中启动它.这导致启动相同活动的多个副本,这些副本彼此冲突.
例如,如果我的应用程序包含ABC活动,则上述问题可能会导致堆栈ABCA.
我尝试使用Intent所有活动来解决这个问题,但每当我点击HOME时,它都会产生不必要的副作用,即将活动堆栈清除为root.
示例: ABC - > HOME - > A当我需要的是ABC - > HOME - > ABC
在使用HOME时,是否有一种防止启动相同类型的多个活动而不重置根活动的好方法?
我正在尝试将我的第一个Android应用程序的发布版本发送给几个测试人员.但是,我遇到了问题.当您退出应用程序,然后通过其图标启动它重新输入它时,它会重新启动整个应用程序,而不是返回到它以前的位置.即使您在退出后立即重新输入,也会发生这种情况.但是,如果我按住主页按钮并通过最近的应用列表启动它,则不会发生这种情况.
我在网上搜索了其他有这个问题的人,但也有一些,但没有人对他们为什么会这样做有一个可靠的答案.在旧的问题中建议将启动模式设置为清单文件中的singletask或singleinstance,但这对我没有帮助,而且 - 根据我的理解,android的默认行为是返回到任务的先前状态在这种情况下,所以我不知道为什么我需要特殊的清单选项才能做到这一点.
关于这个问题最奇怪的是,如果我使用eclipse和调试器将应用程序放在我的手机上,则不会出现此问题.我甚至不需要连接到调试器,似乎只要我有应用程序的调试版本,问题就不会发生.但是,如果我使用发布版本(我使用Eclipse中的Android工具 - 导出签名应用程序包菜单选项创建它),则会出现问题.如果有人对导致这种情况有什么了解,我很乐意听到你的想法.
我正面临这些链接中提到的问题:
http://code.google.com/p/android/issues/detail?id=2373
http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2
我有一个简单的根活动与LAUNCHER和MAIN意图,没有别的.我开始另一个活动,在清单中没有任何标志或任何额外的东西.
我启动应用程序(root活动),然后从那里开始第二个活动.按Home(主页)按钮后,任务将进入后台.在再次启动应用程序时(从Launcher或按住最近应用程序的Home按钮),它会在现有堆栈的顶部启动根活动的新实例.
如果我按下后退按钮,新的"root"活动将关闭,旧的第二个活动将可见,这意味着它将在同一任务中启动根活动,而不是将任务带到前台.
为了解决这个问题,我做了root活动的启动模式singleTask.现在,当我按下主页并再次启动应用程序时,它会清除旧的根任务上方的活动,并将旧的根任务带到前台,而不是仅将第二个活动的整个旧任务放在最前面.请注意,旧的根任务仍保留其应用程序状态,这意味着它不是新实例,但已杀死较高的活动.
它甚至发生在从市场上下载的其他应用程序中.手动安装方法对我没有影响,它仍然以相同的方式启动.
能Activity.getIntent()回来null吗?
该文件没有提到这种可能性,所以我想知道如果我要检查的结果getIntent()为null解引用前值.
我需要在按下后退按钮时最小化应用程序.
我使用以下代码来捕获硬件后退按钮单击事件
帮助我按下后退键的最小化代码
@Override
public boolean onKeyDown(int keyCode, keyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_BACK;
//minimize application
return true;
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud) 我尝试了所有方法,但它对我不起作用.我想在点击通知的同时打开或恢复打开任何屏幕的应用程序.
我使用以下方法:
NotificationCompat.BigTextStyle notiStyle = new NotificationCompat.BigTextStyle();
notiStyle.setBigContentTitle(team);
notiStyle.bigText(message);
Intent resultIntent = new Intent(this, MainDrawerActivity.class);
resultIntent.putExtra("fromNotification", "notification");
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT);
int icon = R.mipmap.ic_launcher;
return new NotificationCompat.Builder(this).setSmallIcon(icon)
.setAutoCancel(true)
.setContentIntent(resultPendingIntent).setContentTitle(team)
.setContentText(message).setStyle(notiStyle).build();
Run Code Online (Sandbox Code Playgroud) 当我的 android 应用程序第一次启动时FirstActivity。当我点击按钮而FirstActivity不是 start AddTraderActivity。如果我按下按钮“ START REQUEST ”AddTraderActivity然后我打电话:
setResult(RESULT_OK);
finish();
Run Code Online (Sandbox Code Playgroud)
结果AddTraderActivity是破坏和展示FirstActivity。好的。
现在我想为AddTraderActivityTest. 这里测试:
@RunWith(AndroidJUnit4::class)
@SmallTest
class AddTraderActivityTest {
@get:Rule
var addTraderActivity: IntentsTestRule<AddTraderActivity> =
IntentsTestRule(AddTraderActivity::class.java)
@Test
fun toolBarHeight() {
onView(withId(R.id.toolBar))
.check(matches(withHeightResId(R.dimen.tool_bar_height)))
}
@Test
fun buttonStartTextUppercase() {
onView(withId(R.id.startButton))
.check(matches(withTextUppercaseResId(R.string.start)))
}
}
Run Code Online (Sandbox Code Playgroud)
结果当我开始这个测试时,然后只开始AddTraderActivity并测试成功通过。好的。
现在我想为单击按钮“ START REQUEST ”编写测试
这里测试:
setResult(RESULT_OK);
finish();
Run Code Online (Sandbox Code Playgroud)
结果,当测试运行并按下按钮“ START REQUEST ”时,我收到下一个错误:
测试开始于 16:05 ...
$ adb shell am instrument -w -r -e debug false -e …Run Code Online (Sandbox Code Playgroud)