我需要知道以下流程是否正常:活动A onPause被调用,因为活动B占据了焦点,但几秒钟后,当活动B完成并且在调用活动A的onStop和onDestroy之前,活动A(相同的实例) )onResume被调用.我在清单中的活动A defition中有noHistory = true.
我认为,一旦活动失去焦点,就永远不会返回具有noHistory = true的活动的实例.
当TabWidget使用意图为每个选项卡指定目标活动时,在默认操作之外的活动堆栈上是否有对这些活动的特殊处理?
对于Instance,如果我的应用程序有选项卡A,B和C,我按此顺序单击它们 - A,B,A,C,A,B - 活动堆栈将如何更改?
我对默认操作的理解,如果每次在intent上调用startActivity(),都会让Stack继续加载活动的新实例:A,AB,ABA,ABAC,ABACA,ABACAB
很难相信它的工作原理......似乎它会浪费资源而且可能是无穷无尽的.任何人都可以告诉我这将如何实际工作?
我知道这可能不是最好的做法,但这就是我想要做的.
当我的广播接收器被调用时 - 启动一个不是全屏并且具有透明背景的新活动 - 在您当前的活动/桌面壁纸之上打开.
我到目前为止的代码如下:
我用以下方法创建+调用新活动:
Intent testActivityIntent = new Intent(context, com.andy.tabletsms.work.SMSPopup.class);
testActivityIntent.putExtra("com.andy.tabletsms.message", main.msgs.get(i));
testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
context.startActivity(testActivityIntent);
Run Code Online (Sandbox Code Playgroud)
然后活动的主题是:
机器人:主题= "@安卓风格/ Theme.Translucent.NoTitleBar"
而活动的代码只是一个简单布局的沼泽标准活动.然而,当该广播接收器启动活动时 - 它出现在应用程序启动时启动的上一个活动的顶部.....根据此图像显示:

我有一个带有listview的简单应用程序.当用户点击列表项时,我开始一个新活动
Intent eventdetails = new Intent(HomeActivity.this,EventDetailsActivity.class);
eventdetails.putExtra("eventId", ev.getId());
eventdetails.putExtra("eventDate", ev.getEnglishDate());
startActivity(eventdetails);
Run Code Online (Sandbox Code Playgroud)
一旦EventDetailsActivity启动,HomeActivity就会被销毁(调用onDestroy).当用户从EventDetailsActivity点击后退按钮时,将重新创建HomeActivity,这是我不想要的.
我还没弄清楚为什么HomeActivity首先被杀死了.我也使用udb检查了活动堆栈,但它没有显示HomeActivity
Running activities (most recent first):
Run #0: ActivityRecord{43938cc8 com.app.event/.EventDetailsActivity}
Run Code Online (Sandbox Code Playgroud)
这种情况仅发生在三星Galaxy Note 2上
知道为什么会这样吗?
我对 Android 中的不同活动启动模式感到非常困惑。我知道它与活动堆栈有关,这对我来说也不太清楚。我希望通过一个简单的用例对每个 launchMode 进行简短的解释。
我有一个应用程序,如果我在某个屏幕上,并且用户试图访问需要身份验证的应用程序的特定部分,它会在继续之前进入登录屏幕.
该应用程序当前所做的是,比如我在屏幕3上,但是想要进入屏幕4,但我需要先登录才能进入屏幕4.显示登录屏幕,登录后,用户被重定向到屏幕1必须返回步骤才能返回他们所在的屏幕.
我想要的是,当用户点击按钮进入屏幕4时,显示登录屏幕,并且一旦登录,用户就被发送到屏幕4,不再返回到屏幕3,然后再次点击该按钮.
我试过的是调用finish(); 一旦用户成功登录,但所有操作都是将用户返回到屏幕3,使他们必须点击按钮才能进入屏幕4,当然现在允许他们登录屏幕4.
有什么想法我可以在我的应用程序中实现这一点?
谢谢
编辑:标题可能会误导,我想不出更好的方式来改写标题.如果可以请继续请求编辑
我在理解活动堆栈及其影响我的应用程序的行为方面遇到了一些问题。
单击按钮后,它会启动一个打开浏览器的 Intent。当我在浏览器中并按下主页按钮时,我会进入主屏幕。现在,如果我通过启动器再次启动我的应用程序,它会打开浏览器而不是我的应用程序。如何在启动我的应用程序时绕过打开浏览器?
现在,打开 url 的代码如下所示:
private void openUrlExternal(String url) {
Intent openUrlIntent = new Intent(Intent.ACTION_VIEW);
openUrlIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
openUrlIntent.setData(Uri.parse(url));
startActivity(openUrlIntent);
}
Run Code Online (Sandbox Code Playgroud)
我是否使用了错误的标志?如果是这样,我必须使用哪些标志?
提前致谢!
我正在创建一个Android应用程序(棒棒糖版本).应用程序在启动画面中间显示大徽标.登录屏幕顶部包含一个小尺寸的徽标.我使用ActivityOptions.makeSceneTransitionAnimation()将动画从大屏幕的启动画面设置为登录屏幕的小徽标.
启动启动应用程序的启动画面.延迟几毫秒后,启动画面创建登录屏幕的意图.还设置过渡.然后它开始登录活动.它开始了徽标的过渡动画.并成功显示登录屏幕.一切都运作良好,动画是顺利到此为止.
然后我添加了"finish();" 在启动画面中,以便登录屏幕上的后退按钮不会加载闪屏.现在转型正在闪烁.
我尝试了以下方法,但仍有闪烁.
在这里,我正在粘贴splashScreen的代码.此代码正在运行,但在转换时会闪烁.类末尾的 gotoLoginScreen()方法是加载登录活动的地方.登录界面是android studio的基本活动模板.使用com.android.support:appcompat-v7:21.0.2库来支持较低的设备.
公共类SplashActivity扩展ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_splash, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. …Run Code Online (Sandbox Code Playgroud) 我使用以下代码调用另一个活动.
if(position==4) {
Intent intent = new Intent();
intent.setClass(tlActivity, Income.class);
startActivity(intent);
finish();
}
Run Code Online (Sandbox Code Playgroud)
但是当我进入第二个叫做的活动时.我无法返回之前调用活动2的活动.有没有什么办法可以按回按钮返回第一个活动.我正在使用2.2 SDK
提前致谢
我有个问题.我有一个列表视图(A)和一个详细视图(B).
在B上,我有一个"视图列表"按钮,始终将用户带到列表中.问题是,我可以通过通知到达B,而不一定是来自A.
所以当点击B时,我不能只使用finish(),因为我可以从通知进来,所以在某些情况下我可能需要开始一个新的活动.
我如何可靠地判断我是从A进来还是从通知进来,这样我才能采取正确的行动.
除此之外,这是我应该担心的吗?或者只是每次都开始一项活动.如果我在A - > B - > A - > B - > A - > B之间一遍又一遍地弹跳......从来没有一次调用finish()......会减慢速度吗?
谢谢,
杰拉德.
我有一个主菜单活动,有一堆按钮.一个按钮启动一个新活动,允许用户填写并提交表单.当用户提交表单时,第三个活动开始,基本上只是一个包含一些内容的屏幕和一个返回主菜单的按钮.但是,当我创建一个intent并转到main活动时,setContentView()不起作用,我的按钮赋值会导致NullPointerException.
我知道有一些方法可以通过意图标志或调用finish()返回堆栈.我没有成功的意图标志,如Intent.FLAG_ACTIVITY_CLEAR_TOP.完成()将无法工作,因为我是两个活动,而不是一个.回到主要活动的正确方法是什么?
谢谢