অ্যান্ড্রয়েডে ওএস / ব্যবহারকারীর দ্বারা গেম ক্র্যাশ / হত্যা দ্বারা ফাইল অপারেশন (গুলি) ব্যর্থ


13

আমার গেমটি গেম / অ্যাপ্লিকেশন অভ্যন্তরীণ স্টোরেজে কোনও ফাইলে নির্দিষ্ট ব্যবধানের পরে তার রাজ্যটি সংরক্ষণ করে। যখন আমার গেমটি ব্যবহারকারী বা ওএস দ্বারা যথাক্রমে হত্যা বা ক্র্যাশ হয়ে যায়, আমরা সেই ফাইলটিতে বর্তমান গেমের অবস্থাটি লিখি। ফিক্স ব্যবধানের পরে ফাইল রাইটিং ঠিকঠাক কাজ করছে তবে যখন ওএস বা ব্যবহারকারীর দ্বারা গেম ক্র্যাশ / নিহত হয় তখন ফাইল রাইটিং অপারেশন ব্যর্থ হয়। অপারেশন ব্যর্থতার ফলে অসম্পূর্ণ গেমের অবস্থা বা খালি গেমের অবস্থা অর্থাত্ ফাইলটিতে কোনও ডেটা লিখিত নেই। অ্যান্ড্রয়েড পরিষেবাটি ব্যবহার করে আমি একাধিক সমাধান চেষ্টা করেছি, যদি কোনও পরিষেবা না হয় তবে অ্যাপ্লিকেশনটির সাথে কোনও স্টিকি সার্ভিসটি মারা যায় না। অন্যদিকে যদি পরিষেবাটি স্টিকি থাকে তবে এটি পুনরায় চালু করা হয় তবে অভিপ্রায়টি যা পরিষেবাটির সাথে প্রাথমিকভাবে সংযুক্ত ছিল তা বাতিল বা নতুন।

প্রশ্নটি হল আমার গেম / অ্যাপ্লিকেশনটি ব্যবহারকারী / ওএস দ্বারা নিহত হওয়ার পরে আমি কীভাবে অভ্যন্তরীণ স্টোরেজে ফাইলটিতে আমার ডেটা ((-৩০ এমবি হতে পারে) সম্পূর্ণভাবে সংরক্ষণ করতে পারি?


আপনি নিজের সিগন্যালগুলি এবং আপনার সিগিলগুলি পরিচালনা করতে পারেন (সম্ভবত সিগিলগুলি নাও হতে পারে, অ্যান্ড্রয়েড সম্ভবত সাইনটারম ব্যবহার করছে)। (পুরো উত্তরটি গবেষণার / লেখার জন্য সময় নেই তবে এটি মূল ধারণা))
জন হ্যামিল্টন

2
সংজ্ঞা অনুসারে @ জনহ্যামিলটন সিগ্কিল পরিচালনা করা যাবে না।
দারখোগ

@ দারখোগ ভাল, ityক্যে নয়, এটি নিশ্চিতভাবে। (আমি এই নির্দিষ্ট উদ্দেশ্যে একটি প্রকল্পের জন্য এক পর্যায়ে লিনাক্স কার্নেল পরিবর্তন করেছি এবং অবশ্যই প্রোগ্রামগুলি সিক্কিল পরিচালনা করতে দেওয়া সম্ভব)
জন হ্যামিল্টন

উত্তর:


20

আমি আপনার সেভ স্টেটটি ডাবল-বাফার পদ্ধতিতে লেখার পরামর্শ দেব, যেমনটি অতীতে কনসোল শিরোনামগুলির জন্য সাধারণ ছিল (যেখানে আপনাকে মেমরি কার্ডটি মাঝের লেখার অপসারণের সাথে মোকাবিলা করতে হয়েছিল এবং লেখাগুলি ধীর ছিল)।

সংরক্ষণ:

  • যদি কোনও ফাইলের অস্তিত্ব না থাকে তবে ফাইল ফাইল এ লিখুন
  • যদি এ বিদ্যমান থাকে, বি তে লিখুন
  • যদি এ এবং বি উভয়ই বিদ্যমান থাকে তবে কোনটি বড় তা সন্ধান করুন, এটি মুছুন এবং তারপরে সেইটিকে লিখুন

ভার:

  • যদি এ এবং বি উভয়ই বিদ্যমান থাকে তবে দু'টির আরও নতুন লোড করার চেষ্টা করুন। যদি এটি ব্যর্থ হয় (কারণ ফাইলটি অসম্পূর্ণ বা দূষিত), এটি মুছুন এবং অন্যটি লোড করুন
  • যদি কেবল একটির উপস্থিত থাকে তবে এটি লোড করুন
  • যদি দু'জনই দুর্নীতিগ্রস্থ হন তবে ব্যবহারকারীকে জানান যে তাদের সংরক্ষণের অবস্থা অপ্রত্যাশিত ছিল (যেমন আপনার সম্ভবত সম্ভবত ইতিমধ্যে করতে হবে)

এই অ্যাপ্লিকেশনটি মাঝামাঝি সময়ে মারা গেলেও আপনার স্টোরেজে কমপক্ষে একটি বৈধ সংরক্ষণ এখনও উপস্থিত রয়েছে তা নিশ্চিত করার জন্য এই প্রবাহটি কাজ করবে। যদি সেই ধরণের ব্যর্থতা ঘটে তবে আগের সেভের পরে খেলোয়াড় গেমের রাজ্যে কোনও পরিবর্তন আনবে না, তবে তাদের আর শুরু করতে হবে না।

এছাড়াও, আপনার বিরতি সংরক্ষণের পাশাপাশি কী ইভেন্টগুলি (যেমন অ্যাপ্লিকেশন ক্রিয়াকলাপগুলির) পরে তাত্ক্ষণিকভাবে সঞ্চয় করা উচিত, দুর্বলতার উইন্ডোটি হ্রাস করতে যেখানে ক্র্যাশ / কিল করার ফলে কীটি ইভেন্টটি হারিয়ে যাবে be এটি গেমের শোষণের বিরুদ্ধেও সুরক্ষা (যেমন প্রাণ হারানোর পরে অ্যাপটিকে জোর করে হত্যা করা, কারণ আপনি জানেন যে আপনি জীবন হারানোর আগে থেকেই গেম-স্টেটে ফিরিয়ে আনবেন এবং আবার চেষ্টা করার চেষ্টা করবেন)। অবশ্যই এটি করতে পারলে আপনাকে অবশ্যই আপনার অন্তর সাশ্রয়কে যুক্তি দিয়ে রক্ষা করতে হবে যা বলে যে "যদি কোনও সেভ ইতিমধ্যে প্রগতিতে থাকে তবে আবার সংরক্ষণ শুরু করার চেষ্টা করবেন না।"


ধন্যবাদ মিঃ ক্র্যাঙ্কি এটি আমার সমস্যার আংশিক সমাধান যা আমি শেষ সেশনের ডেটা সংরক্ষণ করতে পারি যেমন অ্যাপ্লিকেশন / গেমটি হত্যার আগে? উদাহরণস্বরূপ তিনি অ্যাপ্লিকেশন ক্রয় এবং অ্যাপ্লিকেশনটি মেরেছেন।
ফয়সাল ইমরান

12
এমনকি আপনার দুটি ফাইলের দরকার নেই। বি কে লিখুন, যদি এবং কেবল লেখাই সফল হয় তবে A কে মুছে ফেলুন এবং B- এর নাম java.nio.file.Files.move(Path source, Path target, CopyOption... options)পরিবর্তন করে পারমাণবিক ক্রিয়াকলাপ হিসাবে পুনরায় নামকরণ এবং ওভাররাইটিং করতে পারবেন।
পলিনোম

6
@ পলিগনোম: নোট করুন যে শক্তি ব্যর্থতার ক্ষেত্রে এটি সর্বদা আপনার প্রত্যাশিত গ্যারান্টি সরবরাহ করে না, যদি না আপনি sync()ফাইল এ এর ​​আগে ফাইল এ সরিয়ে নেওয়ার আগে কল করেন (তারপরে সম্পূর্ণ গ্যারান্টি নেই তবে sync()মোটামুটি ভাল)।
ডায়েত্রিচ এপ্প

1
@ ফয়সালআইমনান গুরুত্বপূর্ণ অপারেশনের পরে ডেটা সংরক্ষণ করুন, উদাহরণস্বরূপ, আইএপি পরে। ফোন বন্ধ হয়ে যদি অপারেশনটি বাধাগ্রস্ত হয়, তবে আমার ধারণা এটি কোনওভাবেই সেই ব্যক্তির কাছ থেকে টাকা নেবে না। তবে কেবলমাত্র, আপনি কিছু কেনার প্রয়াস হিসাবে কোনও প্ল্যাটফর্মের ক্রয়ে তার অ্যাকাউন্টের ডেটা সংরক্ষণ করতে পারেন। তারপরে আপনি আপনার উপার্জনটি সেই ডেটার সাথে তুলনা করতে পারেন এবং এই ব্যক্তি সত্যিই কিছু কিনেছেন কিনা তা দেখতে পারেন। এবং তারপরে অনলাইনে পরিষেবাটির মাধ্যমে এই বৈশিষ্ট্যটি খুলুন আপনি সমস্ত ডেটা সংরক্ষণ করতে ব্যবহার করছেন। আপনি যদি আইএপি-র জন্য স্থানীয় সংরক্ষণগুলি ব্যবহার করে থাকেন তবে এটি এই সমস্যার থেকেও খারাপ।
প্রার্থী মুন _ম্যাক্স_

1
শেষ পর্যন্ত, যদিও এটি আপনার সমস্ত সমস্যার সমাধান না করে, আমি বলতে পারি যে আপনার সমস্যাটি সম্পূর্ণ সমাধানযোগ্য নয়। আপনি "ব্যবহারকারী যে কোনও সময়ে আমার অ্যাপ্লিকেশনটি মেরে ফেলতে পারেন" এবং "কোনও ডেটা কখনও হারাতে হবে না" উভয়কেই সমর্থন করতে পারবেন না কারণ কোনও ইভেন্ট হওয়ার পরে সবসময় উইন্ডো থাকবে তবে এটি স্টোরেজ চালিয়ে যাওয়ার আগে যেখানে ব্যবহারকারী থাকবে অ্যাপ্লিকেশনটি মেরে ফেলতে এবং ডেটা হারাতে পারে।
মিঃ ক্র্যাঙ্কি

3

অ্যান্ড্রয়েড কেবলমাত্র অ্যাপ্লিকেশনগুলিকে ব্যাকগ্রাউন্ডে থাকলেই হত্যা করে। অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আপনার গেমের ডেটা কি সত্যিই আপডেট করা দরকার, বা অ্যাপটি পূর্বের পৃষ্ঠায় ফিরে না আসা পর্যন্ত আপনি কি ডেটা আপডেট করা বন্ধ করতে পারবেন? আপনি যদি কোনও ইভেন্টের ইতিহাস বা এমনকি বর্তমান অবস্থাটি অ্যাপ্লিকেশনটির সম্মুখের দিকে ফিরে আসে তবে আপনি এমনকি কোনও মাল্টিপ্লেয়ার গেমটিতে আপডেটগুলি পিছিয়ে রাখতে সক্ষম হতে পারেন। এটি এমন কিছু যা আপনার সম্ভবত সিপিইউ, নেটওয়ার্ক এবং ব্যাটারি দক্ষতার জন্য যা করা উচিত।

যদি ব্যবহারকারী আপনার অ্যাপ্লিকেশনটিকে হত্যা করে, চলমান পরিষেবাদিগুলির কাছে একটি কল পাওয়া উচিত onTaskRemoved। আপনি যদি এই পদ্ধতিতে বেশি প্রসেসিং করার চেষ্টা করেন তবে কী হবে তা আমি জানি না। আমি আশা করি যদি এটি একটি নির্দিষ্ট সময়ের মধ্যে না ফিরে আসে তবে অ্যান্ড্রয়েড kill -9আপনার অ্যাপ্লিকেশনটি করবে ।


অ্যাপ্লিকেশনটির ব্যাকগ্রাউন্ডে আপডেট হওয়ার দরকার নেই, তবে অ্যাপ্লিকেশনটিকে অবশ্যই তার ডেটা সংরক্ষণ করতে হবে বা পটভূমিতে যাওয়ার আগে বা ধ্বংসের আগে জেসন ফাইল।
ফয়সাল ইমরান

আপনি ঠিক অন টাস্ক সরানো পদ্ধতিটি কল করবে তবে ফাইলটি সংরক্ষণের জন্য প্রয়োজনীয় সময়টি আরও বেশি বা আমরা বলতে পারি যে গণনার সময় অনেক বড়। যখন ব্যবহারকারী অ্যাপটি মেরে ফেলবে তখন এই পদ্ধতিটি বন্ধ হয়ে যাবে।
ফয়সাল ইমরান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.