我是一个新的Android开发者。现在我想开发一个应用程序并实现一个情况
我有4个活动,活动 A-> B-> C-> D 。
我想从D到B,完成C并恢复B(如果存在,只需执行on-resume)
现在我使用了以下标志:
FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK
但是这两个标志会导致活动执行onCreate方法。 我在oncreate方法中有很多事情要做,所以我只想恢复活动B.
非常感谢! 更新
现在我在活动D中使用跟随代码(转到活动B),它看起来非常好。还有其他更好的主意吗?
Intent mIntent = new Intent(this,ActivityB.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(mIntent);
答案 0 :(得分:1)
如果你想一直从D导航到B,你可以在导航到D时完成C.
在你的C:
var audioEngine: AVAudioEngine = AVAudioEngine()
var audioFilePlayer: AVAudioPlayerNode = AVAudioPlayerNode()
@IBAction func playButton(sender: AnyObject) {
var file = "file7.pcm"
var fileManager = NSFileManager.defaultManager()
var wayToFile = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
var passMusicFileURL: NSURL?
if let documentPath: NSURL = wayToFile.first as NSURL! {
let musicFile = documentPath.URLByAppendingPathComponent(file)
passMusicFileURL = musicFile
var audioFile = AVAudioFile()
var audioBuffer = AVAudioPCMBuffer()
do{
audioFile = try AVAudioFile(forReading: passMusicFileURL!)
let audioFormat = audioFile.processingFormat
let audioFrameCount = UInt32(audioFile.length)
audioBuffer = AVAudioPCMBuffer(PCMFormat: audioFormat, frameCapacity: audioFrameCount)
} catch {
print("error!!! ")
}
do {
try audioFile.readIntoBuffer(audioBuffer)
} catch _{
print("error")
}
var mainMixer = audioEngine.mainMixerNode
audioEngine.attachNode(audioFilePlayer)
audioEngine.connect(audioFilePlayer, to:mainMixer, format: audioBuffer.format)
do {
try audioEngine.start()
} catch _{
print("error")
}
audioFilePlayer.play()
audioFilePlayer.scheduleBuffer(audioBuffer, atTime: nil, options: AVAudioPlayerNodeBufferOptions.Loops, completionHandler: nil)
}
}
答案 1 :(得分:0)
首先不要完成去另一个活动的活动,也要删除 FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK
并使用 机器人:launchMode =" singleInstance"
在包含B活动的清单文件中
<activity name="B.class"
android:launchMode="singleInstance"
/>
答案 2 :(得分:0)
您可以调用startAcivityForResult()函数来更改活动并检查意图数据以停止/继续。这很容易,你可以通过这个来处理每一项活动。
答案 3 :(得分:0)
最好使用startactivityforresult 你的要求“我希望从D到B,完成C并恢复B(如果存在,只需执行恢复)。”
从C使用调用D时
startactivityforresult(intent,requestCode)
现在当您完成D时,只需致电setResult(ResultOK)
并在C活动的onActivityResult上处理此结果并完成那里的c活动
这里自动调用您的B活动onresume
任何进一步的查询请通知我 更多关于startactivityforresult` http://developer.android.com/intl/es/training/basics/intents/result.html 你也可以尝试@Kamalone评论,在调用D时,只要完成C,如果唯一的要求是完成C或者如果你想要处理一些结果就去startactivityforresult