2016-09-17 27 views
0

私のアプリでは、ユーザーにファイルをダウンロードさせます。ユーザーが気づいている長い行動以来、私はサービスを使用してフォアグラウンドサービスとして開始することに決めました。私はサービスを起動し、ダウンロードを終了して終了し、すべての時間を実行しない。StopForegroundはフォアグラウンドサービスを停止しません

私の主な活動から、私がサービスを開始しようとしているコールです。ここで

Intent intent = new Intent(this, typeof(DownloaderService)); 
intent.PutExtra("id", ID); 
StartService(intent); 

iがフォアグラウンドサービスとしてサービスを開始する方法で、これはDownloaderServiceクラス内ここ

public override void OnCreate() 
{ 
    //Start this service as foreground 
    Intent notificationIntent = new Intent(this, typeof(VideoDownloaderService)); 

    PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, 
       notificationIntent, 0); 

    Notification notification = new Notification.Builder(this) 
         .SetSmallIcon(Resource.Drawable.Icon) 
         .SetContentTitle("Initializing") 
         .SetContentText("Starting The Download...") 
         .SetContentIntent(pendingIntent).Build(); 

    StartForeground(notificationID, notification); 
} 

は私がダウンロード方式でなければなりません

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
{ 
    var id = intent.GetStringExtra("id"); 

    Task.Factory.StartNew(async() => { 
     await download(id); 
     StopForeground(false); 
    }); 

    return StartCommandResult.NotSticky; 
} 

意図を処理する方法です非同期。

ここで私の問題は、サービスが正常に起動しないことです。download(id)メソッドは正常に終了しますが、アプリを終了しても(これは私が望むものです)。しかし、StopForeground(false);への呼び出しの後でも動作し続けます。後で実行する必要はありません。これはリソースを消費するため、システムはフォアグラウンドサービスであるため、簡単には終了しません。

私のサービスがAndroidデバイスマネージャーで動作していて、私のアプリがまだVS2015のデバッグで実行されているのがわかりました。

サービスを停止する他の方法はありますか?

答えて

1

stopForeground()メソッドは、の前景状態のうち、Serviceを停止します。パラメータとしてfalseを使用すると、おそらく通知が削除されないので、trueに切り替えることができます。

Service自体を停止させるには、stopSelf()と電話することができます。

だからあなたのコードのようなものが考えられます。(。。私は実際にコードを実行せずに逃したしかし、あなたはとにかく基本的なアイデアを得ることをいくつかのマイナーなディテールがありますしない限り、...)

Task.Factory.StartNew(async() => { 
     await download(id); 
     stopForeground(true); 
     stopSelf(); 
    }); 

+0

こと動作していないようで、私はまだプロセスを見ることができ、vsはまだデバッグしています。私はOnDestroy()メソッドをオーバーライドしようとしましたが、メソッドが呼び出されているのがわかりますが、プロセスは死ぬことはありません。 –

+0

Xamarin/C#の世界では、物事は異なるかもしれません。それは私がよく知っているように私の心は "普通のAndroid Java"に書かれていました。 –

+0

xamarin.androidは本質的にjavaバージョン上のポートなので、同じように動作しなければなりません。 –

関連する問題